重新建议在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);
沿Y方向输入的数据非常密集(想像一下,就像您已经记录了每条建筑物,电话亭,邮政信箱和鸽子在很长路上的位置一样)。我已经测试了R-Indexes在Java中如何处理此数据,以及该领域中的其他人已成功将它们应用于平面文件格式。但是,没有人将它们应用于数据库AFAIK,这是此测试的目标。
向沿特定轴并不是完全不同的空间模型添加大量数据时,有没有人看到过类似的行为?如果我反转坐标用法,问题仍然存在。如果这是原因,我正在运行以下设置
- MacOS 10.6.6
- MySQL 5.1.46