最有效的方法来计算面积服务Asp.net + SQL Server
本文关键字:Asp 服务 net Server SQL 有效 方法 计算 | 更新日期: 2023-09-27 18:08:59
我正在建立一个有公司数据库的网页。
每个公司可以在其仓库的给定距离内提供服务。例如,一家公司可以为邮编4214周边200公里的地区提供服务。
我希望最少能得到1000家公司。
现在我的问题是,我正试图有一个在线目录,并有一个客户搜索公司在他们的邮政编码。
避免数据库遍历每个公司,并计算给定的邮政编码是否在其服务区域内。我创建了一个名为AreasServiced。它只有一个ID,郊区ID,公司ID
当公司注册时,他们说邮政编码和他们旅行的距离。然后,网页计算给定距离内的所有郊区id,并将其添加到数据库中。然后,当客户搜索给定的邮政编码时,它只需要派生郊区id并在areasserviced数据库中搜索。
我遇到的问题是,如果我有1000个客户,这个区域服务表将有数百万行长…
会有问题吗?
有更有效的方法吗?
回应所提供的答案:
我刚刚实现了一个新的地理表,它工作得很好。
然而我刚刚意识到…
如果每个公司都有他们服务的区域(邮政编码,转换成long/lat)和距离(例如200km)
现在当客户搜索在一个区域内提供服务的公司时。数据库仍然需要遍历每一家公司,计算他们所服务的领域。然后继续?
这是最有效的方法吗?还是应该坚持使用包含所有服务区域的数据库当客户搜索特定邮政编码时,我只需查询该邮政编码表?
我可能已经解决了:
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传递一个字符串来有效地查询所有附近的服务位置。
选择区域内的地理点
这样,您将拥有每个公司的单个记录,您将不必计算和插入一个公司涵盖的所有副词。