【问题标题】:Optimizing hierarchical data based category table优化基于分层数据的类别表
【发布时间】:2016-01-08 12:08:02
【问题描述】:

我有一个基于本教程的分类表:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

表格的结构真的很简单:

id, lft, rgt

这是查询:

SELECT c . *, (COUNT(DISTINCT(parent.id))) AS level
FROM categories AS parent, categories AS c
WHERE c.lft
BETWEEN parent.lft
AND parent.rgt
GROUP BY c.id
ORDER BY c.lft

如您所见,同一张表被使用了两次。有一个 between 子句,它有 group by 和 order by。

我完全不确定应该如何优化它。

当对此使用 EXPLAIN 时,我得到:

Using index; Using temporary; Using filesort

【问题讨论】:

  • 让我们看看整个EXPLAIN。让我们看看SHOW CREATE TABLE。运行这个:FLUSH STATUS; SELECT ...; SHOW SESSION STATUS LIKE 'Handler%'; 并告诉我们表中有多少行以及结果集中有多少行。

标签: mysql optimization query-optimization


【解决方案1】:

我建议您尝试使用 closure table 的方法 - 更简单的想法和更易读的查询。 您将需要一个 INSERT/UPDATE 触发器以及包含父母与其子女/孙子女/孙子女之间所有可能关系的闭包表...... 还包括节点本身(DEPTH = 0)

+-------------+----------+-------+
| ancestor_id | child_id | depth |
+-------------+----------+-------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2022-08-24
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    相关资源
    最近更新 更多