Mysql GROUP BY和ORDER BY子句导致查询速度慢

Mysql GROUP BY和ORDER BY子句导致查询速度慢,mysql,performance,group-by,Mysql,Performance,Group By,我有一个执行了很长时间的查询。article_category和article表都有大约25万行。我尝试了一些多列索引,但没有什么能加快查询速度。当前的解释是这样的,当前使用的状态索引由article.status和article.published组成,优化器当前决定使用它 你能给我一些建议,创建哪个索引来加速这个查询吗 1简单参考主状态,发布状态1常量109338,使用where;使用临时设备;使用文件排序 1简单ac参考主、fk_物品_类别_类别_id_类别_id主4 e15.a.id 1

我有一个执行了很长时间的查询。article_category和article表都有大约25万行。我尝试了一些多列索引,但没有什么能加快查询速度。当前的解释是这样的,当前使用的状态索引由article.status和article.published组成,优化器当前决定使用它

你能给我一些建议,创建哪个索引来加速这个查询吗

1简单参考主状态,发布状态1常量109338,使用where;使用临时设备;使用文件排序

1简单ac参考主、fk_物品_类别_类别_id_类别_id主4 e15.a.id 1使用where

1个简单c等式参考初级4 e15.ac.类别id 1

SELECT SQL_NO_CACHE `a`.`id`,`a`.`title`,`a`.`perex`,`a`.`published`,`a`.`updated`,`a`.`article_type_id`,`a`.`tag`   ,`ac`.`category_id`,`c`.`name`,`a`.`top_hp`,`ac`.`top_category`,`a`.`is_pr`,`a`.`seo_title`,`c`.`id_domain` 
FROM `article` `a`  
JOIN `article_category` `ac` ON `ac`.`article_id` = `a`.`id` 
JOIN `category` `c` ON `ac`.`category_id`=`c`.`id` 
WHERE `ac`.`category_id` IN (109,118,38,39,40,62,63,119,110,111,112,113,114,115,116,117,121,122) 
AND `a`.`status`='published' AND a.published < "2014-02-03 22:45:00"
GROUP BY `a`.`id` 
ORDER BY `a`.`published` DESC 
LIMIT 0,8

在加入他们之前,您应该限制您的结果,例如,像这样的未经测试!:

SELECT SQL_NO_CACHE `a`.`id`,`a`.`title`,`a`.`perex`,`a`.`published`,`a`.`updated`,`a`.`article_type_id`,`a`.`tag`   ,`ac`.`category_id`,`c`.`name`,`a`.`top_hp`,`ac`.`top_category`,`a`.`is_pr`,`a`.`seo_title`,`c`.`id_domain` 
FROM 
(
SELECT `id` FROM `category` WHERE `id` IN (109,118,38,39,40,62,63,119,110,111,112,113,114,115,116,117,121,122) 
) `c` JOIN `article` `a`  
JOIN `article_category` `ac` ON `ac`.`article_id` = `a`.`id` 
JOIN ON `ac`.`category_id`=`c`.`id` 
WHERE `a`.`status`='published' AND a.published < "2014-02-03 22:45:00"
GROUP BY `a`.`id` 
ORDER BY `a`.`published` DESC 
LIMIT 0,8

最后我找到了解决办法。由于GROUPBY子句的顺序不同,因此未使用索引


修复后的性能更差,但感谢您的尝试:-也许您可以重新设计查询,where'a'。。。。第条在加入之前也会执行