SQL Server,Lat和Lon查询

时间:2012-03-05 12:54:39

标签: sql sql-server latitude-longitude

我正在运行查询以获取半径15英里内的表中的所有位置。查询最多可能需要15秒。

SELECT * 
FROM rmiukpostcodes
WHERE 3963.191 * ACOS( (SIN(PI()*50.8320711166062/180)*SIN(PI()*latitude/180))+(COS(PI()*50.8320711166062/180)*cos(PI()*latitude/180)*COS(PI()*longitude/180-PI()*-0.207548227491786/180))) < = 5 

我有什么办法可以加快速度吗?

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

您可以从使用计算的持久列中受益。你相信,由于你的WHERE条款,你正在进行表/索引扫描。

捕获您的执行计划。尝试添加计算列并更改SELECT查询。

答案 2 :(得分:0)

您的查询会读取表格中的每一行。使用一些SARGABLE过滤条件和索引。

例如:在运行查询之前,预先计算最大/最小纬度或长度并使用它。

WHERE
  codes.Lat BETWEEN @minLat AND @maxLat
  AND YourDistanceCalcHere(codes.Lat, codes.Long)

然后,代码索引(Lat)将有助于查询