Aktualisierung:
Siehe diesen Artikel in meinem Blog für eine detailliertere Analyse des Problems:
Wenn Sie etwas wie LIMIT 150000, 10
ausgeben , bedeutet dies, dass MySQL
sollte diese 150,000
durchqueren Aufzeichnungen und finde die nächsten 10
.
Das Durchlaufen des Index ist in MySQL
langsam .
Auch MySQL
ist nicht in der Lage, späte Zeilensuchen durchzuführen.
Theoretisch, wenn Sie ORDER BY id LIMIT 100000, 10
ausführen , reicht es aus, den Index zu verwenden, um die Werte ab 100000
zu finden bis 100010
, dann suchen Sie nur 10
Zeilen, die diesen Index erfüllen, und sie zurückgeben.
Alle gängigen Systeme außer MySQL
sind sich dessen bewusst und schlagen die Zeilen nur dann nach, wenn die Werte wirklich zurückgegeben werden sollen.
MySQL
, sucht jedoch jede Zeile nach.
Versuchen Sie, Ihre Abfrage so umzuschreiben:
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