MySQL 9.0 版本注意事項
對於 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
欄位中。該資料表還有一個 AUTO_INCREMENT
欄位 fid
,用於儲存物件 ID 值。
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