3

我正在升级库存数据库并希望加快查询速度。大部分排序在 2 列上,每列都是一个范围。例如。

SELECT ....
WHERE price BETWEEN 10.50 AND 34.20 
AND date BETWEEN 1311264060 AND 1313942460
ORDER BY stockNo LIMIT 100

我知道因为使用了范围,MySQL 只能在一列上使用索引。换句话说,它可以使用索引来提取与价格范围匹配的记录,但随后必须借助表扫描来查找与日期范围匹配的记录。

我的想法是假设价格和数据是 x 和 y 轴并填充一列空间数据,并利用 MySQL 的空间搜索和 R-TREE 索引来提取数据。

有人有R-TREES的经验吗?这可能会给我提速吗?

4

1 回答 1

2

R-trees 最适用于维度具有相似含义的数据,例如地理坐标,并且您可以执行窗口查询(例如范围查询)。

您的数据可能有几个可能会损害 R-trees 的影响,例如价格将只有一些离散值,并且日期范围没有完全不同的比例。当实际上计算价格差异和时间差异的乘积时,许多 R-tree 优化策略(例如“体积”和“面积”)没有多大意义。

不过,R-tree 可能仍然有效。但是你可能最好使用 kB-trees 和类似的分裂树。不确定 MySQL 是否有这些,我不这么认为(它通常缺乏所有高级功能)。

于 2011-11-25T22:06:05.860 回答