MySQL 8.4 發行說明
對於 InnoDB 和 MyISAM 資料表,MySQL 可以使用類似於建立常規索引的語法來建立空間索引,但使用 SPATIAL 關鍵字。空間索引中的欄位必須宣告為 NOT NULL。以下範例示範如何建立空間索引
使用
CREATE TABLECREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326, SPATIAL INDEX(g));使用
ALTER TABLECREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); ALTER TABLE geom ADD SPATIAL INDEX(g);使用
CREATE INDEXCREATE 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 TABLE或DROP INDEX
使用
ALTER TABLEALTER TABLE geom DROP INDEX g;使用
DROP INDEXDROP INDEX g ON geom;
範例:假設表格 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