Актуализация:
Вижте тази статия в моя блог за по-подробен анализ на проблема:
Когато издавате нещо като LIMIT 150000, 10 , това означава, че MySQL трябва да премине тези 150,000 записи и намерете следващите 10 .
Преминаването през индекса е бавно в MySQL .
Също така, MySQL не може да извършва прегледи на късен ред.
Теоретично, ако направите ORDER BY id LIMIT 100000, 10 , достатъчно е да използвате индекса, за да намерите стойностите от 100000 до 100010 , след което потърсете само 10 редове, които удовлетворяват този индекс и ги връщат.
Всички основни системи с изключение на MySQL са наясно с това и търсят редовете нагоре само ако стойностите наистина трябва да бъдат върнати.
MySQL , обаче, търси всеки ред.
Опитайте се да пренапишете заявката си така:
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