1

我的数据库中有一个类别树。我还有一个通过类别 ID 与树关联的项目表。

现在,我想列出特定类别中的所有项目及其子项及其子项等...

现在,我这样做:

  • 检索所有相关类别的 id。
  • 使用 WHERE 子句在 items 表中进行查询,如下所示: WHERE cat_id=2 OR cat_id=10 OR ...

如果我有很多类别,我认为这种方式会导致查询非常慢且非常长。有时搜索可以包含 100 个类别。

有更好的做法吗?

4

1 回答 1

1

来自“在关系数据库中存储树”的 gugl:http: //mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

  • 邻接表很简单,但在大多数复杂情况下并不好
  • 嵌套集从第一个视图来看是复杂的(主要是在写入期间),但它更像是在 RDBM 中存储和读取树的标准。

+1 关于

EXPLAIN select * from table

这将帮助您查看瓶颈。

也尝试代替

column1 = 1 or column1 = 2

就像是:

column1 in (1, 2)

但无论如何,如果没有索引,它就无济于事。

于 2011-05-09T18:07:13.733 回答