0

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

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 和 MBRContains函数。使用 MySQL 5.1

4

1 回答 1

0

对于一维数据(这些是 1d 间隔,对吗?),存在比 r-tree 更好的索引结构。这些是为 2-10 维的动态数据设计的(在更高的维度上,性能不太好,因为拆分策略和距离函数不再工作得很好)

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

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

于 2012-08-18T07:20:31.650 回答