Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  SPATIAL Index Optimization

10.3.3 空间索引优化

MySQL 允许在非空几何值列(见 第 13.4.10 节,“创建空间索引”)上创建 空间 索引。优化器检查索引列的 SRID 属性,以确定用于比较的空间参考系统(SRS),并使用适合 SRS 的计算。(在 MySQL 8.3 之前,优化器使用笛卡尔计算来比较 空间 索引值;如果列包含非笛卡尔 SRID 的值,则这些操作的结果未定义。)

为了使比较正确工作,每个 空间 索引列必须是 SRID 限制的,即列定义必须包含明确的 SRID 属性,并且所有列值必须具有相同的 SRID。

优化器仅考虑 SRID 限制的 空间 索引:

  • 笛卡尔 SRID 限制的索引启用笛卡尔边界框计算。

  • 地理 SRID 限制的索引启用地理边界框计算。

优化器忽略没有 SRID 属性的 空间 索引(因此不是 SRID 限制的)。MySQL 仍然维护这些索引,如下所示:

  • 它们在表修改时更新(INSERTUPDATEDELETE 等)。更新就像索引是笛卡尔的,即使列可能包含笛卡尔和地理值的混合。

  • 它们仅用于向后兼容性(例如,在 MySQL 8.1 中转储并在 MySQL 8.2 中恢复)。因为 空间 索引在不受 SRID 限制的列上对优化器无用,因此每个这样的列都应该被修改:

    • 验证列中的所有值是否具有相同的 SRID。要确定 geometry 列 col_name 中包含的 SRID,请使用以下查询:

      SELECT DISTINCT ST_SRID(col_name) FROM tbl_name;

      如果查询返回多行,则该列包含 SRID 的混合。在这种情况下,修改其内容以使所有值具有相同的 SRID。

    • 重新定义列以具有明确的 SRID 属性。

    • 重新创建 空间 索引。