LIMIT 句を使用すると、SELECT ステートメントに指定した数のレコードを強制的に返すことができます。 LIMIT は 1 つまたは 2 つの数値引数を受け入れます。パラメータは整数定数である必要があります。 2 つのパラメーターが指定された場合、最初のパラメーターは最初に返されるレコード行のオフセットを指定し、2 番目のパラメーターは返されるレコード行の最大数を指定します。最初のレコード行のオフセットは 0 (1 ではありません) です。以下に、特殊な場合の mysql ページング クエリをまとめます。
mysql はページング関数を提供します:
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
最も単純な使用法は次のとおりです:
select * from table limit ?,?
これは最も単純な制限ページング クエリです。 where 条件と一緒に使用します:
select * from table where column > ? order by id limit ?,?
上記の状況では、列と ID に複合インデックスを構築することをお勧めします。
上記 2 つのケースでは、この SQL は少量のデータ量のページング クエリには十分です。ただし、数百万レベル以上のデータ テーブルの場合、上記の SQL を使用すると、limit ステートメントのオフセットがますます大きくなり、クエリがますます遅くなります。同様:
select * from `user` where `cate`='陕西' order by id limit 100000,10
この種のクエリを回避するには、subquery を使用してクエリの効率を向上させることができます。
select * from `user` where id >=(select * from `user` where `cate`='陕西' order by id limit 100000,1) and `cate`='陕西' limit 10
説明を通じて、直接制限クエリとサブクエリの違いがわかります。
追加ALL | (NULL) | (NULL) | (NULL) | (NULL) | 4076607 | |
---|---|---|---|---|---|---|
タイプ | possible_keys | キー | key_len | ref |
PRIMARY | 範囲 | PRIMARY | PRIMARY | 4 | 1 | where の使用 |
---|---|---|---|---|---|---|
index | ( NULL ) | PRIMARY | 4 | 4076663 | インデックスの使用 | |
一般に、インデックス ファイルはデータ ファイルよりもはるかに小さいため、インデックス ファイルを操作する方が直接的かつ効率的です。 | さらに、 | 結合ページングメソッドも使用できます | 結合ページングとサブクエリページングの効率は基本的に同じレベルです。 (ただし、サブクエリはメモリ内に一時テーブルを作成する必要があります。クエリが完了した後、MySQL はこれらの一時テーブルをキャンセルする必要があります。この状況は結合することで回避できます) クエリをページングする前に、それが範囲内であるかどうかを判断できます。ページ数が制限されている場合は、基本ページング クエリを使用し、1 より大きい場合はサブクエリ ページング処理を使用します。 | 関連する推奨事項: | mysql ページング パフォーマンスの調査 |
MySQL ページング パフォーマンス最適化ガイド
以上がMySQL ページング クエリの例の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。