MySql 8没有使用空间索引

MySql 8没有使用空间索引,mysql,indexing,spatial,Mysql,Indexing,Spatial,我有一个名为SHAPE的空间列,带有srid4269和空间索引。当我提问时 select geoid10 as zipcode from tl_2019_us_zcta510 where st_intersects(ST_GeomFromText('POINT(30.330280 -82.759009)',4269),SHAPE); 跑步需要2分钟。该表包含33k条记录 我检查了查询是否正在使用索引 explain select geoid10 as zipcode from tl_20

我有一个名为SHAPE的空间列,带有srid4269和空间索引。当我提问时

select geoid10 as zipcode from tl_2019_us_zcta510
   where st_intersects(ST_GeomFromText('POINT(30.330280 -82.759009)',4269),SHAPE);
跑步需要2分钟。该表包含33k条记录

我检查了查询是否正在使用索引

explain select geoid10 as zipcode from tl_2019_us_zcta510
   where st_intersects(ST_GeomFromText('POINT(30.330280 -82.759009)',4269),SHAPE);
我得到了结果

+----+-------------+--------------------+------------+------+---------------+------+---------+------+-------+----------+-------------+
| id | select_type | table              | partitions | type | possible_keys | key  | key_len | ref  | rows  | filtered | Extra       |
+----+-------------+--------------------+------------+------+---------------+------+---------+------+-------+----------+-------------+
|  1 | SIMPLE      | tl_2019_us_zcta510 | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 28206 |   100.00 | Using where |
+----+-------------+--------------------+------------+------+---------------+------+---------+------+-------+----------+-------------+
这清楚地表明查询没有使用空间索引

我在Mysql 5.7中运行了相同的查询,它使用的是空间索引

有人能帮我吗。
是否还有其他配置更改需要注意。

这并不能回答问题,但可能会增加一些见解

8.0.4变更日志显示我添加了粗体:

不兼容更改:以前,这些空间函数忽略了笛卡尔平面上几何参数和计算结果的空间参考系SRS。它们现在支持对指定地理SRS的几何参数进行计算:ST_距离\球体、ST_IsSimple、ST_IsValid、ST_长度

以前,这些空间函数忽略了笛卡尔平面上任何几何参数和计算结果的SRS。现在,当使用指定地理SRS的几何参数调用时,它们会产生一个错误:ST_区域、ST_缓冲区、ST_形心、ST_凸形、ST_差分、ST_包络、ST_相交、ST_IsClosed、ST_MakeEnvelope、ST_简化、ST_符号差分、ST_联合、ST_验证

以前,这些空间函数允许具有未定义SRS的几何参数。现在,当使用具有未定义SRS的几何参数调用时,它们会产生一个错误:ST_维度、ST_距离、ST_球体、ST_端点、ST_外部环、ST_几何体、ST_几何体类型、ST_内部环、ST_IsEmpty、ST_IsSimple、ST_IsValid、ST_长度、ST_NumGeometries、ST_NumInteriorRing、ST_NumInteriorRings、ST_NumPerings、ST_NumPoints、ST_PointN、ST_StartPoint,圣斯瓦克西,圣斯瓦克西,圣斯瓦克西

以前,ST_GeoHash空间函数接受具有任何SRID的点。ST_GeoHash现在只接受SRID为0或4326的点。 注

如果空间数据包含的几何体值现在被刚刚列出的函数以不同的方式解释,那么与以前的MySQL版本相比,使用这些函数的现有查询将返回不同的结果


我的评论:什么是4269?也许只有4326个被处理?使用4326会运行得更快吗?

我读了这篇文章后解决了这个问题:

基本上,您需要在创建表时或使用ALTER为列定义默认SRID

在您的情况下,表tl_2019_uszcta510中的geoid10列应该使用SRID4269定义,然后它应该正确使用空间索引。 这对我有用

这是Nikita在dba.stackexchange.com上引用的正确答案:

SRID属性使空间列SRID受到限制,它具有 这些影响:

该列只能包含具有给定SRID的值。试图 插入具有不同SRID的值会产生错误

优化器可以在列上使用空间索引。见第节 8.3.3,“空间索引优化”

没有SRID属性的空间列不受SRID限制,并且 接受具有任何SRID的值。但是,优化器不能使用空间 在列定义修改为包含 SRID属性,该属性可能要求首先输入列内容 已修改,以便所有值都具有相同的SRID


我还有一个疑问。使用innodb引擎执行此操作效果良好。但当我使用mysql ndb集群时,我想使用ndb引擎,以便跨节点复制数据。由于ndb不支持空间参考系统,替代解决方案应该是什么?InnoDB提供复制。请进一步解释您选择NDB的原因。NDB服务于一个小的利基;InnoDB服务于广泛的应用程序。我希望3台主机的HA设置不会出现单点故障。此外,所有主机都应执行读和写操作write@ArbazSheikh-参见MariaDB附带的Galera,它允许在3+节点上读写。或Oracle的组复制/Innodb群集。两者都没有SPOF,并执行自动故障切换。两者都处理InnoDB和SPATIAL MariaDB 10.2/MySQL 5.7