Spec-Zone.ru › MySQL 5.7

11.4.9 Создание пространственных индексов

Для таблиц InnoDB и MyISAM MySQL может создавать пространственные индексы, используя синтаксис, аналогичный созданию обычных индексов, но с использованием ключевого слова SPATIAL. Столбцы в пространственных индексах должны быть объявлены NOT NULL. Следующие примеры демонстрируют, как создавать пространственные индексы:

  • С помощью CREATE TABLE:

    CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));
    
  • С помощью ALTER TABLE:

    CREATE TABLE geom (g GEOMETRY NOT NULL);
    ALTER TABLE geom ADD SPATIAL INDEX(g);
    
  • С помощью CREATE INDEX:

    CREATE TABLE geom (g GEOMETRY NOT NULL);
    CREATE SPATIAL INDEX g ON geom (g);
    

SPATIAL INDEX создаёт индекс R-дерева. Для движков хранилища, поддерживающих не пространственное индексирование пространственных столбцов, движок создаёт индекс B-дерева. Индекс B-дерева на пространственных значениях полезен для поиска точных значений, но не для сканирования диапазонов.

Дополнительную информацию об индексировании пространственных столбцов см. в Разделе 13.1.14, «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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/creating-spatial-indexes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API