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