文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF(美国信纸) - 40.0 MB
PDF(A4) - 40.1 MB
手册页(TGZ) - 258.2 KB
手册页(Zip) - 365.3 KB
信息(Gzip) - 4.0 MB
信息(Zip) - 4.0 MB


MySQL 9.0 参考手册  /  ...  /  空间索引优化

10.3.3 空间索引优化

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

为了使比较正常工作,SPATIAL 索引中的每一列都必须受 SRID 限制。也就是说,列定义必须包含显式 SRID 属性,并且所有列值必须具有相同的 SRID。

优化器仅针对受 SRID 限制的列考虑 SPATIAL 索引。

  • 受限于笛卡尔 SRID 的列上的索引支持笛卡尔边界框计算。

  • 受限于地理 SRID 的列上的索引支持地理边界框计算。

优化器忽略没有 SRID 属性的列上的 SPATIAL 索引(因此不受 SRID 限制)。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 索引。