MySQL在同一个表中存储不同的嵌套集

时间:2012-08-15 17:00:07

标签: mysql data-structures dataset nested-sets r-tree

我有一个存储嵌套集的表。它存储由集合区分的不同嵌套集(是的,我在这里混合术语,真的应该是嵌套的)。看起来有点像这样:

id | orgid | leftedge | rightedge | level | collectionid
1  | 123   |  1       |  6        |  1    |   1
2  | 111   |  2       |  3        |  2    |   1
3  |  23   |  4       |  5        |  2    |   1
4  |  67   |  1       |  2        |  1    |   2
5  | 123   |  3       |  4        |  1    |   2
6  | 600   |  1       |  6        |  1    |   3
7  |  11   |  2       |  5        |  2    |   3
8  | 111   |  3       |  4        |  3    |   3

最初我想利用R-Tree索引,但是我已经看到的代码:LineString(Point(-1, leftedge), Point(1, rightedge))不会很好用,因为它没有考虑到collectionid和 id :1和 id :6最终会相同。

有没有办法可以在我当前的设置中使用R-Tree索引...当然你可以在同一个表中使用不同的嵌套集?我的主要目标是能够使用MBRWithin and MBRContains函数。使用MySQL 5.1

1 个答案:

答案 0 :(得分:0)

对于单维数据(这些是1d间隔,对吧?),存在比r树更好的索引结构。这些设计用于2-10维的动态数据(在更高的维度,性能不太好,因为拆分策略和距离功能不再适用)

实际上对于您的用例,经典SQL应该可以很好地工作。数据库可以有效地利用其索引。拥有良好的索引结构是一回事,但您希望让数据库尽可能地利用它拥有的索引。

因此,我只需索引leftEdgerightEdge以及<, <=, >, >=函数。他们很快!对于collectionid列,位图索引应该是好的。