Aktualizacja:
Zobacz ten artykuł na moim blogu, aby uzyskać bardziej szczegółową analizę problemu:
Kiedy wydajesz coś takiego jak LIMIT 150000, 10 , oznacza to, że MySQL powinien przejść przez te 150,000 rekordy i znajdź następne 10 .
Przemierzanie indeksu jest powolne w MySQL .
Również MySQL nie jest zdolny do wyszukiwania późnych wierszy.
Teoretycznie, jeśli zrobisz ORDER BY id LIMIT 100000, 10 , wystarczy użyć indeksu, aby znaleźć wartości z 100000 do 100010 , a następnie wyszukaj tylko 10 wiersze, które spełniają ten indeks i zwracają je.
Wszystkie główne systemy z wyjątkiem MySQL są tego świadomi i sprawdzają wiersze tylko wtedy, gdy wartości rzeczywiście mają zostać zwrócone.
MySQL jednak sprawdza każdy wiersz.
Spróbuj przepisać zapytanie w ten sposób:
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