如何使用閉包表優化 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 分享