我正在构建一个包含公司数据库的网页。
每家公司都可以在其仓库指定距离内为区域提供服务。 例如,1 家公司可能服务 200 公里的邮政编码 4214。
我希望至少有 1000 家公司。
现在我遇到的问题是我正在尝试创建一个在线目录并让客户在他们的邮政编码范围内搜索一家公司。
避免数据库遍历每个公司,并计算给定的邮政编码是否在其服务区域内。我创建了一个名为 服务区域那只有一个 ID,Suburb ID,CompanyID
当公司注册时,他们会说出邮政编码和他们旅行的距离。然后网页计算给定距离内的所有郊区ID并将其添加到数据库中。然后,当客户搜索给定的邮政编码时,它只需要导出郊区 ID 并在 areasserviced 数据库中搜索。
我遇到的问题是,如果我有 1000 个客户,这个 areaserviced 表将有数百万行长。
会不会有问题?
有没有更有效的方法?
回应提供的答案:
我刚刚实现了一个工作正常的新地理表。
然而我才意识到..
如果每家公司都有他们服务的区域(转换为经/纬度的邮政编码)和距离(例如 200 公里)
现在,当客户搜索在某个区域内提供服务的公司时。数据库仍然需要遍历每家公司,计算他们服务的区域。然后继续?
这是最有效的方法吗?还是我应该坚持使用包含他们服务的所有区域的数据库,以便当客户使用特定邮政编码进行搜索时,我将只查询该邮政编码的表?
我可能已经解决了:
declare @p geography;
set @p = (select coordinates from geolookup where geoid = 3714);
select * from Depots
join geolookup on geolookup.geoid = depots.suburbID
where geolookup.coordinates.STDistance(@p)<= depots.DistanceTravelled
最佳答案
只需将公司覆盖的圆心的地理坐标保存在地理数据类型中即可。
然后,您可以通过在 WHERE 子句中使用 STWithin 传递单个经纬度来高效查询附近的所有服务位置。
Selecting geographical points within area
这样一来,每个公司都有一条记录,您就不必计算和插入一家公司涵盖的所有子词。
关于c# - 计算服务区域的最有效方法 Asp.net + SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7459152/