1. Mysql の使用制限
クエリステートメントを使用するとき、データの最初の数行または中間行を返す必要があることがよくあります。心配しないでください。mysql はすでにそのような機能を提供しています。
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
LIMIT 句を使用すると、SELECT ステートメントに指定された数のレコードを強制的に返すことができます。 LIMIT は 1 つまたは 2 つの数値引数を受け入れます。パラメータは整数定数である必要があります。 2 つのパラメーターが指定された場合、最初のパラメーターは最初に返されるレコード行のオフセットを指定し、2 番目のパラメーターは返されるレコード行の最大数を指定します。最初のレコード行のオフセットは (1 ではなく) 0 です。PostgreSQL との互換性のために、MySQL は構文 LIMIT # OFFSET # もサポートしています。
mysql> SELECT * FROM table LIMIT 5,10; // レコード行 6 ~ 15 を取得する
// 特定のオフセットからレコード セットの末尾までのすべてのレコード行を取得するには、2 番目のパラメータを指定します。 as -1:
mysql> SELECT * FROM table LIMIT 95,-1; // レコード行 96-last を取得します。// パラメータが 1 つだけ指定された場合は、レコード行の最大数を返すことになります。 mysql> SELECT * FROM table LIMIT 5; //最初の 5 レコード行を取得します
//つまり、LIMIT n は LIMIT 0,n と同等です。
[引用、通行人 B: Mysql での制限の使用法の詳細な説明]
2. MySql のページング クエリ ステートメントのパフォーマンス分析
MSSQL の TOP 構文と比較した場合の場合、MySQL の LIMIT 構文ははるかに洗練されています。ページネーションに使用するのは自然なことです。
2.1 最も基本的なページング方法:
SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...
小規模および中規模のデータ量の場合、注意が必要な唯一の問題は、インデックスが使用されていることを確認することです:
たとえば。実際の SQL は次のステートメントと似ているため、category_id 列と id 列に複合インデックスを確立することをお勧めします:
SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10
2.2 サブクエリのページング方法:
データ量が増加するにつれて、ページ数は増加します。次の数ページの SQL を見ると、次のようになります。
SQL コード お気に入りのコード
SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10
一言で言えば、ページネーションが進むほど、オフセットが大きくなります。 LIMIT ステートメントが使用され、速度も著しく遅くなります。
現時点では、サブクエリを使用することでページング効率を向上させることができます。これは大まかに次のとおりです:
SELECT * FROM articles WHERE id >= (SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10
2.3JOIN ページングメソッド
SELECT * FROM `content` AS t1 JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2 WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;
テストした結果、結合ページングとサブクエリ ページングの効率は基本的に同じでした。所要時間は基本的に同じレベルです。
SQL ステートメントを説明します:
id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived2> system NULL NULL NULL NULL 1 1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 Using where 2 DERIVED content index NULL PRIMARY 4 NULL 27085 Using index ----------------------------------------
これはなぜですか?サブクエリはインデックス上で完了し、通常のクエリはデータ ファイル上で完了するため、一般に、インデックス ファイルはデータ ファイルよりもはるかに小さいため、操作はより効率的になります。
実際には、戦略モードと同様の方法でページングを処理できます。たとえば、100 ページ以内と判断された場合は最も基本的なページング方法を使用し、100 ページを超える場合はページングを処理します。ページの場合は、サブクエリ ページング方式を使用します。
上記は、Mysql の使用制限といくつかのページング フォームの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。