10.3.3 Оптимизация пространственных индексов
MySQL позволяет создавать SPATIAL индексы по NOT NULL столбцам геометрических типов (см. Раздел 13.4.10, «Создание пространственных индексов»). Оптимизатор проверяет атрибут SRID индексированных столбцов, чтобы определить, какую систему координат (SRS) использовать для сравнения, и использует вычисления, соответствующие этой системе координат. (До MySQL 9.2 оптимизатор выполнял сравнения SPATIAL значений индекса с помощью декартовых вычислений; результаты таких операций не определены, если столбец содержит значения с не-декартовыми SRID.)
Для корректной работы сравнений каждый столбец в SPATIAL индексе должен быть ограничен SRID. То есть, определение столбца должно включать явный атрибут SRID, и все значения столбца должны иметь одинаковый SRID.
Оптимизатор рассматривает SPATIAL индексы только для столбцов с ограничением SRID:
Индексы по столбцам, ограниченным декартовой системой координат, позволяют выполнять вычисления декартовых ограничивающих прямоугольников.
Индексы по столбцам, ограниченным географической системой координат, позволяют выполнять вычисления географических ограничивающих прямоугольников.
Оптимизатор игнорирует SPATIAL индексы по столбцам, у которых нет атрибута SRID (и, следовательно, они не ограничены SRID). MySQL всё равно сохраняет такие индексы следующим образом:
Они обновляются при изменениях таблицы (
INSERT,UPDATE,DELETEи т. д.). Обновления происходят так, как если бы индекс был декартовым, даже если столбец может содержать смесь декартовых и географических значений.-
Они существуют только для обратной совместимости (например, для возможности выполнять дамп в MySQL 8.4 и восстанавливать в MySQL 9.1). Поскольку
SPATIALиндексы по столбцам, которые не ограничены SRID, бесполезны для оптимизатора, каждый такой столбец следует изменить:-
Убедитесь, что все значения в столбце имеют одинаковый SRID. Чтобы определить SRID, содержащиеся в геометрическом столбце
col_name, используйте следующий запрос:SELECT DISTINCT ST_SRID(
col_name) FROMtbl_name;Если запрос возвращает более одной строки, столбец содержит смесь SRID. В этом случае измените его содержимое так, чтобы все значения имели одинаковый SRID.
Переопределите столбец, чтобы указать явный атрибут
SRID.Пересоздайте
SPATIALиндекс.
-
© 2025 Oracle
Licensed under the GPLv2 License.