文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  SPATIAL 索引优化

10.3.3 SPATIAL 索引优化

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 索引。