建议的MPTT表索引

时间:2009-10-20 23:38:08

标签: sql database tree mptt

我只是使用修改的预订树遍历(MPTT)构建一个存储分层数据的表 - 您知道一个:每个节点都存储要查找的leftright ID它的后代。我正在使用CakePHP建议的模型,它与标准方式不同,每行都包含parent_id

以下是建议的表格结构:

CREATE TABLE categories (
    id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    parent_id INTEGER(10) DEFAULT NULL,
    lft INTEGER(10) DEFAULT NULL,
    rght INTEGER(10) DEFAULT NULL,
    name VARCHAR(255) DEFAULT '',
    PRIMARY KEY  (id)
);

以前从未使用过这种风格,并且不知道它是如何被搜索的,我想知道我应该将哪些字段编入索引?主键是否足够,或者我是否应该包括lftrght

2 个答案:

答案 0 :(得分:4)

您将始终使用左列,但我经常需要找到所有叶节点。

WHERE lft = (rgt -1)

所以我通常只用lft,rgt。

对创建一个索引

答案 1 :(得分:1)

我通常只索引左栏。我通常使用mysql,它只允许执行计划中每个表的一个索引用户,左边的索引帮助我为MPTT表编写的每个查询,并且包含在该索引中的权利是最小的。 / p>

简而言之,根据我的经验,左边的单个索引是几乎每个用例的插入/更新速度和选择速度之间的最佳平衡。