Sql 使用子查询执行多边形查询需要很长时间
Sql polygon query taking to long to execute with subquery
我从 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)
我的查询会更快。
您应该将 索引 添加到 geo_id
列。
索引通常保存在平衡树中,因此 id in ( SELECT geo_id FROM users)
具有树搜索的复杂性,应该是 O(log n) 而不是 O(n) 这应该会带来更好的性能。
我从 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)
我的查询会更快。
您应该将 索引 添加到 geo_id
列。
索引通常保存在平衡树中,因此 id in ( SELECT geo_id FROM users)
具有树搜索的复杂性,应该是 O(log n) 而不是 O(n) 这应该会带来更好的性能。