gpt4 book ai didi

mysql - 在mysql中为分层表创建聚簇索引

转载 作者:行者123 更新时间:2023-11-29 02:52:16 26 4
gpt4 key购买 nike

我有一个没有任何深度限制的层次关系,每一行都有一个在列中指定的父行。
大多数查询将仅针对该父键。所以我想将父字段声明为聚集索引,以便我的查询可以快速运行。但问题是表会有频繁的插入和删除操作。
据我所知,聚簇索引字段已排序并指向磁盘上的数据位置,所有非聚簇索引仅使用聚簇索引的引用。我想如此频繁的插入操作应该是昂贵的。所以我该怎么做 ?将父字段声明为聚簇索引可以吗?

最佳答案

PRIMARY KEY 是 MySQL 中唯一可用的“聚集”索引。但是 PK 是 UNIQUE。所以,parent_id 不能是聚集索引,至少不能是聚集索引...

PRIMARY KEY(parent_id, id) 可以。您获得了将 parent_id 作为第一部分的“集群”效果,并且通过包含 id 获得了 UNIQUE。我假设 id 否则就是表的 PK,并且每个“项目”都由 id 唯一标识。

但是等等,您将 id 声明为 AUTO_INCREMENT?然后添加INDEX(id);就足够了。

要找到 $parent 的所有“ child ”:

SELECT ... WHERE parent_id = $parent ...

所有的 child 都将在表中“聚集在一起”,从而提高获取效率。另一方面,孙子会在别处。

寻找 parent :

SELECT parent_id FROM tbl WHERE id = $me

要获取有关 parent 的信息,请执行“自连接”:

SELECT p.*
FROM tbl c
JOIN tbl p ON p.id = c.parent_id
WHERE c.id = $me

要派生所有祖先或所有后代,最好使用带有循环的应用程序代码来执行足够多的 SELECT 以向上或向下遍历树。

关于mysql - 在mysql中为分层表创建聚簇索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34430752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com