LIMIT-Klausel wird häufig verwendet, um eine Teilmenge von Datensätzen aus einer MySQL-Tabelle abzurufen. Wenn der Offsetwert (m) jedoch groß wird, kann sich die Leistung der Abfrage erheblich verschlechtern. Dies liegt daran, dass MySQL normalerweise einen sequentiellen Scan verwendet, um die gesamte Tabelle zu durchlaufen, bis der gewünschte Offset erreicht ist.
Um dieses Leistungsproblem zu lindern, sollten Sie eine Indexierungstabelle erstellen, die einen sequentiellen Schlüssel erstellt, der dem Primärschlüssel Ihrer Tabelle entspricht Zieltabelle. Diese Hilfstabelle, bekannt als „Indexierungstabelle“, fungiert als Brücke zwischen Ihrer Zieltabelle und den gewünschten Zeilen.
Durch die Verknüpfung der Indexierungstabelle mit Ihrer Zieltabelle können Sie eine WHERE-Klausel effizient verwenden Rufen Sie die spezifischen Zeilen ab, die Sie benötigen. So implementieren Sie diesen Ansatz:
CREATE TABLE seq ( seq_no int not null auto_increment, id int not null, primary key(seq_no), unique(id) );
TRUNCATE seq; INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;
Um Zeilen mit einem Offset von 1.000.000 und einem Limit von 1000 abzurufen, Führen Sie die folgende Abfrage aus:
SELECT mytable.* FROM mytable INNER JOIN seq USING(id) WHERE seq.seq_no BETWEEN 1000000 AND 1000999;
Diese optimierte Abfrage nutzt die Indexierungstabelle, um den sequentiellen Scan zu umgehen und direkt auf die gewünschten Zeilen zuzugreifen. Dadurch soll die Performance auch bei großen Offsetwerten deutlich verbessert werden.
Das obige ist der detaillierte Inhalt vonWie optimiere ich MySQL LIMIT-Abfragen mit großen Offsets?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!