10.3.3 Оптимизация пространственного индекса
MySQL позволяет создавать SPATIAL индексы на NOT NULL геометрических столбцах (см. Раздел 13.4.10, «Создание пространственных индексов»). Оптимизатор проверяет атрибут SRID индексированных столбцов, чтобы определить, какую систему пространственных ссылок (SRS) использовать для сравнений, и использует вычисления, соответствующие этой системе. (До MySQL 8.4 оптимизатор выполняет сравнения SPATIAL значений индекса с использованием декартовых вычислений; результаты таких операций не определены, если столбец содержит значения с не-декартовыми SRID.)
Для корректной работы сравнений каждый столбец в SPATIAL индексе должен быть ограничен SRID. То есть определение столбца должно включать явный атрибут SRID, и все значения столбца должны иметь одинаковый SRID.
Оптимизатор рассматривает SPATIAL индексы только для столбцов с ограничением SRID:
Индексы на столбцах, ограниченных декартовым SRID, позволяют выполнять вычисления декартовых ограничивающих прямоугольников.
Индексы на столбцах, ограниченных географическим SRID, позволяют выполнять вычисления географических ограничивающих прямоугольников.
Оптимизатор игнорирует SPATIAL индексы на столбцах, у которых нет атрибута SRID (и, следовательно, они не ограничены SRID). MySQL по-прежнему поддерживает такие индексы следующим образом:
Они обновляются при изменениях таблицы (
INSERT,UPDATE,DELETEи так далее). Обновления происходят так, как если бы индекс был декартовым, даже если столбец может содержать смесь декартовых и географических значений.-
Они существуют только для обратной совместимости (например, для возможности создания дампов в MySQL 8.2 и восстановления в MySQL 8.3). Поскольку
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.