【问题标题】:MySQL Storing different nested sets in same tableMySQL在同一张表中存储不同的嵌套集
【发布时间】:2012-08-18 15:20:31
【问题描述】:

我有一个存储嵌套集的表。它存储由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 and MBRContains 函数。使用 MySQL 5.1

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      相关资源
      最近更新 更多