Sql полигональный запрос занимает много времени, чтобы выполнить с подзапросом - PullRequest
0 голосов
/ 13 апреля 2019

Я начинаю с sql geography и сделал запрос, чтобы получить все сохраненные точки, которые находятся внутри отправленного многоугольника, он получает правильные результаты, но его выполнение занимает много времени. Как повысить производительность этого запроса?

PS: я использую mysql на 5.5.62.

Мой запрос:

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), мой запрос будет выполняться быстрее.

1 Ответ

0 голосов
/ 14 апреля 2019

Вы должны добавить index к geo_id столбцу.

Индексы обычно сохраняются в сбалансированном дереве, поэтому id in ( SELECT geo_id FROM users) будет иметь сложность поиска по дереву, которая должнабыть O (log n) вместо O (n) , что должно повысить производительность.

...