文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 欄位中。該資料表還有一個 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