Sil*_*ght 3 mysql sql query-optimization
我正在寻找一种优化我所拥有的SQL查询的方法.我正在努力获得一定数量的诗歌.
查询看起来像这样:
SELECT
COUNT(*)
FROM
`poems`
WHERE `id` IN (
SELECT `poem_id`
FROM `poems_genres`
WHERE `genre_title` = 'derision'
)
AND `status` = 'finished';
Run Code Online (Sandbox Code Playgroud)
它需要太长时间(大约6-10秒),因为它不能使用索引(因为我认为IN()?).有没有办法以不同的方式重写此查询以更快地获得相同的结果?
Mar*_*ith 11
MySQL 有一个问题,in即它反复重新评估不相关的子查询,就像它们是相关的一样.重写作为联接改进了吗?
SELECT
COUNT(distinct p.`id`)
FROM `poems` p
JOIN `poems_genres` pg
ON p.`id` = pg.`poem_id`
WHERE pg.`genre_title` = 'derision' AND p.`status` = 'finished';
Run Code Online (Sandbox Code Playgroud)
如果没有,那么根据本文(参见"如何强制内部查询首先执行"一节)将它包装在派生表中可能会有所帮助.
SELECT
COUNT(*)
FROM
`poems`
WHERE `id` IN
(
select `poem_id` from ( SELECT `poem_id`
FROM `poems_genres`
WHERE `genre_title` = 'derision') x
) AND `status` = 'finished';
Run Code Online (Sandbox Code Playgroud)