查询:从主类和子类中选择产品

时间:2014-12-16 18:27:03

标签: mysql

我需要在一个查询中选择主类别及其所有子类别中的产品。

我有3个表:items,categories,itemCategories(包含项目和类别之间的链接)。我的类别有左右值(Wikipedia: Nested set model)。

我使用leftCount 5和rightCount 58查询主类别:

SELECT i.* FROM itemCategories ic, categories c, items i 
WHERE i.isActive = '1' AND i.isHidden = '0' 
AND ic.itemId = i.id AND ic.categoryId = c.id 
AND c.leftCount BETWEEN 5 AND 58
ORDER BY i.sortingValue, i.name

我有~16,000个产品,上面的查询将列出约。其中50%。据我所知,这应该是简单的操作,但查询大约需要0.1100秒。

索引适用于:

  • leftCount in categories
  • isActive并隐藏在项目中
  • itemId中的itemId和categoryId

你有任何表现建议吗?

更新

当我删除ORDER BY时,查询时间减少到0.0007秒。所以我猜这个时间用于排序临时表。任何表现助推器都可以帮助实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

BTREEcategories.id上添加categories.leftCount索引:

ALTER TABLE categories ADD INDEX myIXD USING BTREE (id, leftCount)