我从sql地理开始,我进行了查询以获取发送到多边形内的所有存储点,它获得了正确的结果,但是执行起来需要很长时间。如何使该查询的性能更好?
PS:我在5.5.62上使用mysql。
我的查询:
SELECT id, name
FROM geolocations
WHERE id in ( SELECT geo_id FROM users) AND
CONTAINS(GEOMFROMTEXT('POLYGON((-22.892726399999997 -47.05525290000003,-22.891496748403178 -47.05564986693423,-22.8915264 -47.05405289999999,-22.892726399999997 -47.05405289999999,-22.892726399999997 -47.05525290000003))'), coords)
ORDER BY `id` desc LIMIT 0, 10
编辑:如果我删除id in ( SELECT geo_id FROM users)
,则查询会更快。
答案 0 :(得分:0)
您应该在int
列中添加一个索引。
索引通常存储在平衡树中,因此geo_id
的树搜索复杂度应为 O(log n)而不是 O(n ),这应该会带来更好的效果。