sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo acelerar una consulta MySQL con un gran desplazamiento en la cláusula LIMIT?

Tal vez podría crear una tabla de indexación que proporcione una clave secuencial relacionada con la clave en su tabla de destino. Luego, puede unir esta tabla de indexación a su tabla de destino y usar una cláusula where para obtener de manera más eficiente las filas que desea.

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