Aggiornamento:
Vedi questo articolo nel mio blog per un'analisi più dettagliata del problema:
Quando emetti qualcosa come LIMIT 150000, 10 , significa che MySQL dovrebbe attraversare questi 150,000 record e trova il prossimo 10 .
L'attraversamento dell'indice è lento in MySQL .
Inoltre, MySQL non è in grado di eseguire ricerche nelle ultime righe.
In teoria, se fai ORDER BY id LIMIT 100000, 10 , è sufficiente utilizzare l'indice per trovare i valori da 100000 a 100010 , quindi cerca solo 10 righe che soddisfano quell'indice e le restituiscono.
Tutti i principali sistemi tranne MySQL ne sono consapevoli e cercano le righe solo se i valori devono essere davvero restituiti.
MySQL , tuttavia, cerca in ogni riga.
Prova a riscrivere la tua query in questo modo:
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