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