Ik heb het antwoord zelf gevonden, moest de zoekopdracht opsplitsen in meerdere subquery's.
SELECT
mq.*,
@indexer := @indexer + 1 AS indexer
FROM
(
SELECT
p.id,
p.tag_id,
p.title,
p.created_at
FROM
`posts` AS p
LEFT JOIN
`votes` AS v
ON p.id = v.votable_id
AND v.votable_type = "Post"
AND v.deleted_at IS NULL
WHERE
p.deleted_at IS NULL
GROUP BY
p.id
) AS mq
JOIN
(SELECT @indexer := 0) AS i
Blijkbaar veroorzaakte dat een enorm aantal geopende rijen voor de zoekopdracht (volgens EXPLAIN
), maar wist dat ook op te lossen met extra indices. Het volledige antwoord op dat probleem is hier te vinden:Het berekenen van rij-indexen met subquery's met joins, resulteert in A*B onderzochte rijen