如何使用闭包表优化 MySQL 树状结构数据的层级查询?

如何使用闭包表优化 MySQL 树状结构数据的层级查询?

mysql 查询树状结构数据的优化

要查询树状结构数据的层级,通常需要使用递归闭包表等方法。

闭包表

建议使用闭包表来优化此查询,其结构如下:

create table tree(   self int,   parent int,   distance int );

插入示例数据并按 self 分类合并形成树:

from_database = [     ["鸡肉", "鸡肉", 0],     ["鸡肉", "肉类", 1],     ["鸡肉", "食物", 2],     ["肉类", "肉类", 0],     ["肉类", "食物", 1], ] from itertools import groupby  root = {} for _, path in groupby(from_database, key=lambda x: x[0]):     path = sorted(list(path), key=lambda x: -x[2])     node = root     for _, nodename, _ in path:         node = node.setdefault(nodename, {}) print(root)  # {'食物': {'肉类': {'鸡肉': {}}}}

查询

使用 like 查询带肉的字段,结果如下:

select * from tree where self like '%肉%';
+------+---------+----------+ | self | parent  | distance | +------+---------+----------+ | 肉类 | 肉类 | 0 | | 肉类 | 食物 | 1 | | 鸡肉 | 鸡肉 | 0 | | 鸡肉 | 肉类 | 1 | | 鸡肉 | 食物 | 2 | +------+--------+----------+

该方法的优点是,它可以非常高效地查询树状结构数据,并且可以很容易地扩展到查询更多层级的层级。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享