Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Konfiguration des MySQL-Index

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