sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag snabba upp en MySQL-fråga med en stor offset i LIMIT-satsen?

Du kanske kan skapa en indexeringstabell som ger en sekventiell nyckel som är relaterad till nyckeln i din måltabell. Sedan kan du ansluta den här indexeringstabellen till din måltabell och använda en where-sats för att mer effektivt få de rader du vill ha.

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


  1. Fem coola saker jag lärde mig på PostgreSQL Conference Europe 2018

  2. Använder MySQL med Entity Framework

  3. SQL-satsen ignorerar where-parametern

  4. MySQL flyttal jämförelse problem