我有这样的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
答案 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