Możesz zapisać 2 wewnętrzne selekcje, używając zamiast tego JOIN, co z pewnością przyspieszy działanie w obu przypadkach (genre_id = 300
i genre_id = 900
).
SELECT
st.sid, st.title, st.sinopse,
(SELECT GROUP_CONCAT(CAST(genre_id AS CHAR)) FROM fanfiction_stories_genres WHERE sid = st.sid) as genres,
stats.reviews, stats.recomendacoes,
(SELECT GROUP_CONCAT(CAST(warning_id AS CHAR)) FROM fanfiction_stories_warnings WHERE sid = st.sid) as warnings_ids
FROM
fanfiction_stories AS st
LEFT JOIN fanfiction_stories_stats AS stats ON st.sid = stats.sid
JOIN fanfiction_stories_warnings w ON st.sid = w.sid AND w.warning_id = 5
JOIN fanfiction_stories_genres g ON st.sid = g.sid AND g.genre_id = 300
GROUP BY st.sid
ORDER BY st.sid ASC
LIMIT 20