【发布时间】:2015-02-15 03:59:53
【问题描述】:
我需要在一个查询中从一个主类别及其所有子类别中选择产品。
我有 3 个表:项目、类别、项目类别(包含项目和类别之间的链接)。我的类别有左值和右值 (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 和 isHidden 在项目中
- itemCategories 中的 itemId 和 categoryId
您有什么性能建议吗?
更新
当我删除 ORDER BY 时,查询时间减少到 0.0007 秒。所以我想时间都花在对临时表进行排序上。是否有任何性能提升器可以帮助实现这一点?
【问题讨论】:
-
出于好奇,为什么认为 110 毫秒很慢?
-
我不确定它是否很慢,但与我的其他操作相比,它肯定要慢得多。所以我希望有人知道实现我目标的更好方法。真正的查询也有一些左连接,这会进一步减慢它。
标签: mysql