我正在运行查询以获取半径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
我有什么办法可以加快速度吗?
答案 0 :(得分:3)
答案 1 :(得分:1)
您可以从使用计算的持久列中受益。你相信,由于你的WHERE
条款,你正在进行表/索引扫描。
捕获您的执行计划。尝试添加计算列并更改SELECT
查询。
答案 2 :(得分:0)
您的查询会读取表格中的每一行。使用一些SARGABLE过滤条件和索引。
例如:在运行查询之前,预先计算最大/最小纬度或长度并使用它。
WHERE
codes.Lat BETWEEN @minLat AND @maxLat
AND YourDistanceCalcHere(codes.Lat, codes.Long)
然后,代码索引(Lat)将有助于查询