ホームページ  >  記事  >  データベース  >  MySQL ページング クエリの例の説明

MySQL ページング クエリの例の説明

小云云
小云云オリジナル
2018-01-30 17:22:441796ブラウズ

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
追加
SUBQUERY サブクエリを通じて、通常のクエリがデータファイルに対して実行されるのに対し、サブクエリはインデックスに対して実行されることがわかります。 結合ページング
SELECT * FROM `user` AS t1 
JOIN (SELECT id FROM `user` ORDER BY id LIMIT 100000, 1) AS t2 
WHERE t1.id <= t2.id ORDER BY t1.id LIMIT 10;
PRIMARY 範囲 PRIMARY PRIMARY 4 1 where の使用
index ( NULL ) PRIMARY 4 4076663 インデックスの使用
一般に、インデックス ファイルはデータ ファイルよりもはるかに小さいため、インデックス ファイルを操作する方が直接的かつ効率的です。 さらに、メソッドも使用できます 結合ページングとサブクエリページングの効率は基本的に同じレベルです。 (ただし、サブクエリはメモリ内に一時テーブルを作成する必要があります。クエリが完了した後、MySQL はこれらの一時テーブルをキャンセルする必要があります。この状況は結合することで回避できます) クエリをページングする前に、それが範囲内であるかどうかを判断できます。ページ数が制限されている場合は、基本ページング クエリを使用し、1 より大きい場合はサブクエリ ページング処理を使用します。 関連する推奨事項: mysql ページング パフォーマンスの調査
MySQL ページング最適化のテスト ケース

MySQL ページング パフォーマンス最適化ガイド

以上がMySQL ページング クエリの例の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。