Актуализация:
Вижте тази статия в моя блог за по-подробен анализ на проблема:
Когато издавате нещо като 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