sql >> データベース >  >> RDS >> Mysql

LIMIT句に大きなオフセットを使用してMySQLクエリを高速化するにはどうすればよいですか?

    おそらく、ターゲットテーブルのキーに関連するシーケンシャルキーを提供するインデックステーブルを作成できます。次に、このインデックステーブルをターゲットテーブルに結合し、where句を使用して、必要な行をより効率的に取得できます。

    #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. 挿入コマンドを実行し、挿入されたIDをSQLに返します

    2. MySQLデータベース内のすべてのテーブルを一覧表示する4つの方法

    3. MySQL –データベース文字セットのエンコーディングと照合の説明

    4. NextFormマルチテーブルウィザードを使用したDB移行