Atualização:
Veja este artigo no meu blog para uma análise mais detalhada do problema:
Quando você emite algo como
LIMIT 150000, 10 , significa que MySQL deve percorrer estes 150,000 registros e encontre os próximos 10 . Percorrer o índice é lento no
MySQL . Além disso,
MySQL não é capaz de fazer pesquisas de linha tardias. Teoricamente, se você fizer
ORDER BY id LIMIT 100000, 10 , basta usar o índice para encontrar os valores de 100000 para 100010 , procure apenas 10 linhas que satisfazem esse índice e as retornam. Todos os principais sistemas, exceto
MySQL estão cientes disso e procuram as linhas apenas se os valores realmente forem retornados. MySQL , no entanto, procura cada linha. Tente reescrever sua consulta assim:
SELECT news.*
FROM (
SELECT id
FROM news
WHERE cat_id='4'
ORDER BY
id DESC
LIMIT 150000, 10
) o
JOIN news
ON news.id = o.id