ホームページ >php教程 >php手册 >mysql制限クエリ最適化分析

mysql制限クエリ最適化分析

WBOY
WBOYオリジナル
2016-06-13 12:26:261155ブラウズ

制限構文:

コードをコピー コードは次のとおりです。


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 にすぎません。オフセットが大きいほど、後者の方が優れていると予想できます。

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