制限構文:
コードをコピー コードは次のとおりです。
SELECT * FROM table LIMIT [offset,] rows OFFSET offset
LIMIT 句を使用すると、SELECT ステートメントで指定した数のレコードを強制的に返すことができます。 LIMIT は 1 つまたは 2 つの数値引数を受け入れます。パラメータは整数定数である必要があります。
2 つのパラメーターが指定された場合、最初のパラメーターは最初に返されるレコード行のオフセットを指定し、2 番目のパラメーターは返されるレコード行の最大数を指定します。最初のレコード行のオフセットは 0 (1 ではありません) です。
PostgreSQL との互換性のために、MySQL は構文 LIMIT # OFFSET # もサポートしています。
例:
コードをコピー コードは次のとおりです:
mysql> SELECT * FROM table LIMIT 5,10;行6-15
//特定のオフセットからレコード セットの最後までのすべてのレコード行を取得するには、2 番目のパラメーターを -1
mysql> として指定します。 SELECT * FROM table LIMIT 95,-1;検索レコード行 96-last
//パラメータが 1 つだけ指定された場合、LIMIT n は LIMIT 0,n
mysql> //Before と同等になります。レコード 5 行の取得
MySQL の制限はページングに大きな利便性をもたらしますが、データ量が多い場合、制限のパフォーマンスは急激に低下します。
また 10 個のデータを取得しますが、次の 2 つの文は同じ桁ではありません。
コードをコピーします コードは次のとおりです:
select * from table limit 10000,10
select * from table制限 0、10
この記事では、limit を直接使用する代わりに、最初にオフセットの ID を取得し、次に制限サイズを直接使用してデータを取得します。彼のデータによると、limit を直接使用するよりも明らかに優れています。
ここでは、具体的にデータを使用して 2 つの状況でテストします。
1. オフセットが比較的小さい場合:
コードをコピー コードは次のとおりです:
select * from table limit 10,10
//複数実行, time Keep between 0.0004-0.0005
Select * From table Where vid >=(Select vid From table Order By vid limit 10,1) limit 10
//複数回実行すると、時間は 0.0005 ~ 0.0006 の範囲に保たれます。 、主に 0.0006
結論: オフセット offset が小さい場合は、limit を直接使用する方が良いです。これがサブクエリの理由であることは明らかです。
2. オフセットが大きい場合:
コードをコピー コードは次のとおりです:
select * from table limit 10000,10
//複数実行、時間 0.0187 程度に留まります
Select * From table Where vid >=(Select vid From table Order By vid limit 10000,1) limit 10
//複数回実行しても、時間は約 0.0061 のままで、前の 1/3 にすぎません。オフセットが大きいほど、後者の方が優れていると予想できます。