SELECT
*,
getDistance (
104.059237,
30.603216,
p_longitude,
p_latitude
) AS distance
FROM
park
WHERE p_longitude BETWEEN 104.039237
AND 104.079237
AND p_latitude BETWEEN 30.583216
AND 30.623216
AND getDistance (
104.059237,
30.603216,
p_longitude,
p_latitude
) <= 2000
ORDER BY distance
LIMIT 0, 10
上面sql语句作用是在数据库查询相对距离之内的poi,查询环境是在一个15W的记录表中查询,没有加ORDER BY查询时间0.01秒左右,加了ORDER BY之后查询时间在3秒左右,请问有什么地方可以优化吗,distance是得到两点之间的距离函数,网上查了索引是无法添加distance的,平时很少写sql语句,所以很菜。望大神见谅
explain select ...
show index from ..
以供分析。
getDistance函数中的 这个值 经纬度是固定的吗,还是会变化的:104.059237,
30.603216,如果是会变化的,就没办法了。在sql server中可以考虑 使用空间索引,可以计算 任意坐标点 和 当前行数据的坐标点的 差值是否在 一个 距离范围内。
我试过在100w条数据的情况下,只需要1秒内就能返回。