在MySQL中使用空间索引时性能不佳
重新建议在Stack Overflow上提出的一个问题,这是一个更好的论坛。 我正在尝试进行一些实验,以推动不是地理空间但非常适合的数据集,并且发现结果有些令人不安。数据集是基因组数据,例如人类基因组,其中我们有一个DNA区域,其中诸如基因之类的元素占据特定的起始和终止坐标(我们的X轴)。我们有多个占据Y轴的DNA(染色体)区域。目标是带回沿单个Y坐标与两个X坐标相交的所有项目,例如LineString(START 1,END 2)。 该理论听起来很合理,所以我将其推入了现有的基于MySQL的基因组项目中,并提出了一个表结构,如下所示: CREATE TABLE `spatial_feature` ( `spatial_feature_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `external_id` int(10) unsigned NOT NULL, `external_type` int(3) unsigned NOT NULL, `location` geometry NOT NULL, PRIMARY KEY (`spatial_feature_id`), SPATIAL KEY `sf_location_idx` (`location`) ) ENGINE=MyISAM; external_id表示我们已编码到该表中的实体的标识符并对其进行编码external_type。一切看起来都很不错,我输入了一些初步的数据(30,000行),这些数据似乎运行良好。当它增加到超过300万行标记时,MySQL拒绝使用空间索引,并且在强制使用空间索引时速度较慢(40秒与使用全表扫描的5秒相比)。当添加更多数据时,该索引开始使用,但性能损失仍然存在。强制关闭索引可使查询降低到8秒。我正在使用的查询看起来像: select count(*) from spatial_feature where MBRIntersects(GeomFromText('LineString(7420023 1, 7420023 1)'), location); …