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