文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  建立空間索引

13.4.10 建立空間索引

對於 InnoDBMyISAM 資料表,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 陳述式」

若要刪除空間索引,請使用ALTER TABLEDROP INDEX

範例:假設表格 geom 包含超過 32,000 個幾何圖形,這些幾何圖形儲存在類型為 GEOMETRY 的欄位 g 中。該表格還具有一個用於儲存物件 ID 值的 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