Actualización:
Vea este artículo en mi blog para un análisis más detallado del problema:
Cuando emites algo como LIMIT 150000, 10 , significa que MySQL debe atravesar estos 150,000 registros y encuentra el siguiente 10 .
Atravesar el índice es lento en MySQL .
Además, MySQL no es capaz de realizar búsquedas de filas tardías.
Teóricamente, si haces ORDER BY id LIMIT 100000, 10 , es suficiente usar el índice para encontrar los valores de 100000 a 100010 , luego busca solo 10 filas que satisfacen ese índice y las devuelven.
Todos los sistemas principales excepto MySQL son conscientes de ello y miran las filas hacia arriba solo si los valores realmente se van a devolver.
MySQL , sin embargo, busca cada fila.
Intente reescribir su consulta como esta:
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