MySQL 8.3 Release Notes
MySQL 允许在非空几何值列(见 第 13.4.10 节,“创建空间索引”)上创建 空间
索引。优化器检查索引列的 SRID
属性,以确定用于比较的空间参考系统(SRS),并使用适合 SRS 的计算。(在 MySQL 8.3 之前,优化器使用笛卡尔计算来比较 空间
索引值;如果列包含非笛卡尔 SRID 的值,则这些操作的结果未定义。)
为了使比较正确工作,每个 空间
索引列必须是 SRID 限制的,即列定义必须包含明确的 SRID
属性,并且所有列值必须具有相同的 SRID。
优化器仅考虑 SRID 限制的 空间
索引:
-
笛卡尔 SRID 限制的索引启用笛卡尔边界框计算。
-
地理 SRID 限制的索引启用地理边界框计算。
优化器忽略没有 SRID
属性的 空间
索引(因此不是 SRID 限制的)。MySQL 仍然维护这些索引,如下所示:
-
它们在表修改时更新(
INSERT
、UPDATE
、DELETE
等)。更新就像索引是笛卡尔的,即使列可能包含笛卡尔和地理值的混合。 -
它们仅用于向后兼容性(例如,在 MySQL 8.1 中转储并在 MySQL 8.2 中恢复)。因为
空间
索引在不受 SRID 限制的列上对优化器无用,因此每个这样的列都应该被修改:-
验证列中的所有值是否具有相同的 SRID。要确定 geometry 列
col_name
中包含的 SRID,请使用以下查询:SELECT DISTINCT ST_SRID(col_name) FROM tbl_name;
如果查询返回多行,则该列包含 SRID 的混合。在这种情况下,修改其内容以使所有值具有相同的 SRID。
-
重新定义列以具有明确的
SRID
属性。 -
重新创建
空间
索引。
-