MySQL 8.4 發行說明
對於 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 陳述式」。
若要刪除空間索引,請使用ALTER TABLE
或DROP INDEX
使用
ALTER TABLE
ALTER TABLE geom DROP INDEX g;
使用
DROP INDEX
DROP 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