Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso velocizzare una query MySQL con un grande offset nella clausola LIMIT?

Forse potresti creare una tabella di indicizzazione che fornisce una chiave sequenziale relativa alla chiave nella tabella di destinazione. Quindi puoi unire questa tabella di indicizzazione alla tabella di destinazione e utilizzare una clausola where per ottenere in modo più efficiente le righe desiderate.

#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;