【发布时间】:2015-07-31 07:51:44
【问题描述】:
我有这个问题:
SELECT article.id
FROM article
INNER JOIN article_cCountry ON article.id = ID1 AND ID2 = 1
INNER JOIN user_cCountry ON article.uId = user_cCountry.ID1 AND user_cCountry.ID2 = 1
LEFT JOIN user ON article.uId = user.ID
WHERE article.released = "TRUE"
AND article.sDate < now()
AND article.cDate != "0000-00-00 00:00:00"
AND (article.eDate > now() OR article.eDate = 0)
AND ( (user.released = true) OR (article.uId = 0) )
ORDER BY article.cDate DESC
LIMIT 0, 10
查询需要 ~0.3 秒,没有 ORDER BY 只需 ~0.001 秒。
知道为什么 ORDER BY 这么慢吗?
【问题讨论】:
-
explain select...显示了什么,好像 order by 子句中使用的列没有被索引。 -
@AbhikChakraborty 查看编辑
-
那是正确的,您的架构缺少一些索引我建议让索引
article(released,sDate) and user(released)... 备份表并查看现有索引,如果尚未添加上述索引,请添加它们. -
@AbhikChakraborty 好的,我已经添加了提到的索引,但仍然有 ~0.2 秒。还有其他优化的可能吗?
标签: mysql performance