Mysql ページング クエリ方法: 1. [*] の代わりに特定のフィールドを使用します; 2. 最初にインデックスを検索します; 3. [between...and] を使用します、ID は継続的に増加する必要があります; 4. そのままにします前のページ レコードが配置されている ID。
Mysql ページング クエリ メソッド:
簡単な説明
通常MySQL では、ページング クエリを実行するために、limit #{limit}、#{offset} が使用されます。
テーブル内のレコードが多く、ページ数 (#{limit}) が大きい場合、ページング クエリの効率が遅くなります。
速度が低下する理由は、ページング クエリ中に最初に制限オフセット レコードがクエリされ、その後、後続のオフセット レコードがインターセプトされるためです。
この記事では、実際の 1 億 4,000 万テーブル big_table を例として、ページング クエリを最適化する方法を記録します。
テストの説明
テスト テーブル: big_table、データ量: 1 億 4,000 万。
元の SQL (4500ms)
-- 原始分页查询,耗时:4500ms select * from big_table limit 2000000,10;
遅さの理由:
1. クエリ条件は *
2. 制限= 2000000 は大きすぎます
最適化 1 (推奨): * の代わりに特定のフィールドを使用します (1600 ミリ秒)
-- 用明确字段代替*,耗时:1600ms select id,uid,media_id,media_name,news_id,comment from big_table limit 2000000,10;
最適化 2: 最初にインデックスを検索します ( 450ms)
-- 方法1:先对索引进行分页查询,耗时:450ms select * from big_table AS h inner join (select id from big_table limit 2000000,10) AS ss on h.id = ss.id; -- 方法2:先查询出起始位置的索引,耗时:450ms select * from big_table where id > ( select id from big_table limit 2000000,1 ) limit 10;
最適化 3: ... と (5ms) の間
制限事項: ID は継続的に増加する必要があります。
-- 上一页保留最后一条记录所在id,耗时:5ms select * from big_table where id between 4882489 and 4882489 + 10 ;
最適化 4 (推奨): 前のページのレコードの ID を保持します (5 ミリ秒)
制限事項: 最後のレコードの ID を保持する必要があります前のページ
-- 上一页需要保留最后一条记录所在id,耗时:5ms select * from big_table where id > 4882488 limit 10;
#その他の関連する無料学習の推奨事項: #mysql チュートリアル(ビデオ)
以上がmysqlでページングクエリを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。