重载查询不确定发生了什么

时间:2015-05-13 07:02:06

标签: mysql sql ruby-on-rails database

我有这样的SQL查询,需要大量加载......

不确定这里发生了什么......如果有人能帮我解决这个问题。

SELECT  `posts`.* FROM `posts`  
WHERE `posts`.`type` 
IN ('MySubDomainSitePost') 
AND `posts`.`aasm_state` = 'published' 
AND (published_at <= '2015-05-12 01:01:01') 
AND `posts`.`on_frontpage` = 1
AND `posts`.`is_pinned` = 0 
ORDER BY published_at DESC LIMIT 16  

1 个答案:

答案 0 :(得分:2)

您需要使用explain select检查查询效果。现在,对于大型数据集,如果未对列进行索引,则查询将执行得非常糟糕。

从给定的查询中,您可能需要添加以下索引

alter table posts 
add index p_search_idx(type,aasm_state,published_at,on_frontpage,is_pinned);

这会提高查询的速度。

确保在应用索引之前备份表。

无需在查询中使用IN

SELECT  `posts`.* FROM `posts`  
WHERE `posts`.`type` = 'MySubDomainSitePost' 
AND `posts`.`aasm_state` = 'published' 
AND (published_at <= '2015-05-12 01:01:01') 
AND `posts`.`on_frontpage` = 1
AND `posts`.`is_pinned` = 0 
ORDER BY published_at DESC LIMIT 16