如何使用闭包表优化 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 |
+------+--------+----------+

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

以上就是如何使用闭包表优化 MySQL 树状结构数据的层级查询?的详细内容,更多请关注其它相关文章!