order by 后跟计算,如何设置索引抑或优化?

来源:百度知道 编辑:UC知道 时间:2024/06/01 18:03:52
好比谷歌地图, 已知一点的经纬度(39,105),
先有宾馆表,记录了每个宾馆的经纬度(lat, lng)
现在查找离该点最近的10个宾馆,则为
select * from table order by pow(lat-39, 2)+pow(lng-105, 2) ASC limit 10
但是explain这语句发现extra 为 Using filesort,
这个排序会很耗费时间吧
请问是否有一个比较好的解决办法?

很难优化因为你的纬度 39 105不是固定的 建索引行不通
sql语句上你可以试下:
由于我只会oracle所以我说说思路吧

从表里取出lat-39 绝对值最小的十个和lng-105最小的十个作为临时表 然后再选择符合你要求的 注意这里在lat和lng上建立索引是没用的因为用了运算符