文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  空間索引最佳化

10.3.3 空間索引最佳化

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

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

最佳化器僅考慮受 SRID 限制之資料行的 SPATIAL 索引

  • 對限制為笛卡爾 SRID 的資料行建立索引,可啟用笛卡爾邊界框計算。

  • 對限制為地理 SRID 的資料行建立索引,可啟用地理邊界框計算。

最佳化器會忽略沒有 SRID 屬性 (因此不受 SRID 限制) 的資料行上的 SPATIAL 索引。MySQL 仍然會維護此類索引,如下所示

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

  • 它們僅用於向後相容性 (例如,在 MySQL 8.2 中執行傾印並在 MySQL 8.3 中還原的功能)。由於未受 SRID 限制之資料行上的 SPATIAL 索引對最佳化器沒有用處,因此應修改每個此類資料行

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

      SELECT DISTINCT ST_SRID(col_name) FROM tbl_name;

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

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

    • 重新建立 SPATIAL 索引。