Bijwerken:
Zie dit artikel in mijn blog voor een meer gedetailleerde analyse van het probleem:
Wanneer u iets als LIMIT 150000, 10
. uitgeeft , betekent dit dat MySQL
moet deze 150,000
. oversteken records en vind de volgende 10
.
Het doorlopen van de index is traag in MySQL
.
Ook MySQL
is niet in staat om late row lookups uit te voeren.
Theoretisch, als u ORDER BY id LIMIT 100000, 10
, is het voldoende om de index te gebruiken om de waarden van 100000
. te vinden tot 100010
, zoek dan alleen 10
. op rijen die aan die index voldoen en ze retourneren.
Alle belangrijke systemen behalve MySQL
zijn hiervan op de hoogte en zoeken de rijen alleen op als de waarden echt moeten worden geretourneerd.
MySQL
zoekt echter elke rij op.
Probeer uw zoekopdracht als volgt te herschrijven:
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