Я пытаюсь найти эффективный способ выполнения запросов близости, т.е. возвращать ТОЧКИ, которые находятся в радиусе от центральной ТОЧКИ.
Я понимаю, что метод PostGIS ST_DВ пределах является хорошим способом сделать это в PostgreSQL и что это использует ИНДЕКС.
В настоящее время я использую ST_Distance_Sphere(g1, g2 [, радиус]), который возвращает минимальное сферическое расстояние между точкой на сфере в метрах.
SELECT placeNames FROM myPlaces
WHERE ST_Distance_Sphere(placeLocation, POINT(28.861105, 77.337)) < 10000
Я использую предложение WHERE
для фильтрации строк. Использует ли запрос индекс? Если нет, есть ли лучший подход для реализации того же самого.
Я использую MySQL 5.7.26 и 8.0.16, обе используют механизм базы данных InnoDB по умолчанию.
# id, select_type, table, partitions, type, possible_keys, key, key_len, ref, rows, filtered, Extra
`` '1', 'SIMPLE', 'myStoreLocations', NULL, 'ALL', NULL, NULL, NULL, NULL, '2', '100.00', 'Using where'
Я не думаю, что здесь используется пространственный индекс
Я согласен. При условии, что время выполнения не будет "неприличным", я бы не стал больше думать об этом вопросе.
Сначала SRID задал этот запрос 4326 и использовал его; образец
ВЫБЕРИТЕ ST_SetSRID (ST_MakePoint (-71.1043443253471, 42.3150676015829), 4326);
На данный момент в MySQL, похоже, нет «более эффективной» альтернативы ST_Distance_Sphere
или любой другой, использующей пространственный индекс.
Используйте EXPLAIN, чтобы проверить, как выполняется запрос: dev.mysql.com/doc/refman/5.7/en/using-spatial-indexes.html