文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 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 參考手冊  /  ...  /  SPATIAL 索引最佳化

10.3.3 SPATIAL 索引最佳化

MySQL 允許在 NOT NULL 幾何值資料行上建立 SPATIAL 索引 (請參閱第 13.4.10 節,「建立空間索引」)。最佳化工具會檢查索引資料行的 SRID 屬性,以判斷要用於比較的空間參考系統 (SRS),並使用適合 SRS 的計算。(在 MySQL 9.0 之前,最佳化工具使用笛卡爾計算執行 SPATIAL 索引值的比較;如果資料行包含非笛卡爾 SRID 的值,則此類作業的結果未定義。)

為了使比較正常運作,SPATIAL 索引中的每個資料行都必須是 SRID 受限的。也就是說,資料行定義必須包含明確的 SRID 屬性,並且所有資料行值都必須具有相同的 SRID。

最佳化工具僅會考慮 SRID 受限資料行的 SPATIAL 索引

  • 受限於笛卡爾 SRID 的資料行上的索引可啟用笛卡爾邊界方塊計算。

  • 受限於地理 SRID 的資料行上的索引可啟用地理邊界方塊計算。

最佳化工具會忽略沒有 SRID 屬性 (因此不是 SRID 受限) 之資料行上的 SPATIAL 索引。MySQL 仍然會維護這些索引,如下所示:

  • 它們會針對資料表修改進行更新 (INSERTUPDATEDELETE 等)。更新的行為就像索引是笛卡爾式,即使資料行可能包含笛卡爾值和地理值的混合。

  • 它們僅為了向後相容性而存在 (例如,在 MySQL 8.0 中執行傾印,並在 MySQL 8.4 中還原的功能)。由於非 SRID 受限資料行上的 SPATIAL 索引對最佳化工具沒有用處,因此應該修改每個這類資料行

    • 驗證資料行內的所有值都具有相同的 SRID。若要判斷幾何資料行 col_name 中包含的 SRID,請使用下列查詢:

      SELECT DISTINCT ST_SRID(col_name) FROM tbl_name;

      如果查詢傳回多個資料列,則資料行包含 SRID 的混合。在這種情況下,請修改其內容,使所有值都具有相同的 SRID。

    • 重新定義資料行,使其具有明確的 SRID 屬性。

    • 重新建立 SPATIAL 索引。