我需要在一个查询中从主类别及其所有子类别中选择产品。
我有 3 个表:项目、类别、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 秒。
索引适用于:
- 类别中的剩余数量
- 项目中的 isActive 和 isHidden
- itemCategories 中的 itemId 和 CategoryId
您有任何性能建议吗?
更新
当我删除 ORDER BY 时,查询时间减少到 0.0007 秒。所以我猜时间花在了对临时表进行排序上。有任何性能助推器可以帮助实现这一目标吗?
最佳答案
在 categories.id
和 categories.leftCount
上放置 BTREE
索引:
ALTER TABLE categories ADD INDEX myIXD USING BTREE (id, leftCount)
关于mysql - 查询 : Select products from master- and subcategories,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511448/