我需要在一个查询中选择主类别及其所有子类别中的产品。
我有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秒。
索引适用于:
你有任何表现建议吗?
更新
当我删除ORDER BY时,查询时间减少到0.0007秒。所以我猜这个时间用于排序临时表。任何表现助推器都可以帮助实现这一目标吗?
答案 0 :(得分:0)
在BTREE
和categories.id
上添加categories.leftCount
索引:
ALTER TABLE categories ADD INDEX myIXD USING BTREE (id, leftCount)