登录
首页 >  数据库 >  MySQL

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

时间:2024-11-19 12:57:58 381浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何使用闭包表优化 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 树状结构数据的层级查询?》的详细内容,更多关于的资料请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>