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

Wie kann ich eine MySQL-Abfrage mit einem großen Offset in der LIMIT-Klausel beschleunigen?

Vielleicht könnten Sie eine Indizierungstabelle erstellen, die einen sequentiellen Schlüssel bereitstellt, der sich auf den Schlüssel in Ihrer Zieltabelle bezieht. Dann können Sie diese Indizierungstabelle mit Ihrer Zieltabelle verknüpfen und eine where-Klausel verwenden, um die gewünschten Zeilen effizienter zu erhalten.

#create table to store sequences
CREATE TABLE seq (
   seq_no int not null auto_increment,
   id int not null,
   primary key(seq_no),
   unique(id)
);

#create the sequence
TRUNCATE seq;
INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;

#now get 1000 rows from offset 1000000
SELECT mytable.* 
FROM mytable 
INNER JOIN seq USING(id)
WHERE seq.seq_no BETWEEN 1000000 AND 1000999;