优化基于分层数据的类别表

时间:2016-01-08 12:08:02

标签: mysql optimization query-optimization

我有一个基于本教程的类别表: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

如您所见,同一个表格使用了两次。有一个中间条款,它有分组和顺序。

我根本不确定如何优化它。

在使用EXPLAIN时,我得到:

Using index; Using temporary; Using filesort

1 个答案:

答案 0 :(得分:0)

我建议您尝试使用closure table-更简单的主意和更易懂的查询的方法。 您将需要一个用于INSERT / UPDATE的触发器,以及一个闭合表,该闭合表保存了父代与其子代/孙代/孙代/孙代之间的所有可能关系。 还包括节点本身(DEPTH = 0)

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