13.4.10 Создание пространственных индексов
Для таблиц InnoDB и MyISAM MySQL может создавать пространственные индексы, используя синтаксис, аналогичный созданию обычных индексов, но с использованием ключевого слова SPATIAL. Столбцы в пространственных индексах должны быть объявлены NOT NULL. Следующие примеры демонстрируют, как создать пространственные индексы:
-
С помощью
CREATE TABLE:CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326, SPATIAL INDEX(g));
-
С помощью
ALTER TABLE:CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); ALTER TABLE geom ADD SPATIAL INDEX(g);
-
С помощью
CREATE INDEX:CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); CREATE SPATIAL INDEX g ON geom (g);
SPATIAL INDEX создаёт индекс R-дерева. Для движков хранения, поддерживающих не-пространственные индексы для пространственных столбцов, движок создаёт индекс B-дерева. Индекс B-дерева на пространственных значениях полезен для точного поиска по значениям, но не для сканирования диапазонов.
Оптимизатор может использовать пространственные индексы, определённые на столбцах, ограниченных SRID. Для получения дополнительной информации см. Раздел 13.4.1, «Пространственные типы данных» и Раздел 10.3.3, «Оптимизация индексов SPATIAL».
Для получения дополнительной информации об индексации пространственных столбцов, см. Раздел 15.1.15, «CREATE INDEX Statement».
Для удаления пространственных индексов используйте ALTER
TABLE или DROP INDEX:
-
С помощью
ALTER TABLE:ALTER TABLE geom DROP INDEX g;
-
С помощью
DROP INDEX:DROP INDEX g ON geom;
Пример: Предположим, что таблица geom содержит более 32 000 геометрий, которые хранятся в столбце g типа GEOMETRY. Таблица также имеет столбец AUTO_INCREMENT fid для хранения идентификаторов объектов.
mysql> DESCRIBE geom;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| fid | int(11) | | PRI | NULL | auto_increment |
| g | geometry | | | | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT COUNT(*) FROM geom;
+----------+
| count(*) |
+----------+
| 32376 |
+----------+
1 row in set (0.00 sec)
Чтобы добавить пространственный индекс на столбец g, используйте данное выражение:
mysql> ALTER TABLE geom ADD SPATIAL INDEX(g);
Query OK, 32376 rows affected (4.05 sec)
Records: 32376 Duplicates: 0 Warnings: 0
© 2025 Oracle
Licensed under the GPLv2 License.