また、10 個のデータ
select * from yanxue8_visit limit 10000,10
と
select * from yanxue8_visit limit 0,10
は、同じレベルの量ではありません。
インターネット上には、制限に関する 5 つの最適化ガイドラインも多数あります。これらはすべて MySQL マニュアルから翻訳されたものですが、正確ではありますが、実用的ではありません。今日、制限の最適化に関する非常に良い記事を見つけました。元のアドレス: http://www.zhenhua.org/article.asp?id=200
この記事では、limit を直接使用する代わりに、まずオフセット ID を取得し、次に、limit size を直接使用してデータを取得します。彼のデータによると、limit を直接使用するよりも明らかに優れています。ここでは、特に 2 つの状況でのテストにデータを使用します。 (テスト環境 win2033 p4 デュアルコア (3GHZ) 4G メモリ mysql 5.0.19)
1. オフセットが比較的小さい場合。
select * from yanxue8_visit limit 10,10
複数回実行、時間は 0.0004 ~ 0.0005 の間のまま
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10 ,1
) limit 10
複数の実行後、時間は 0.0005 ~ 0.0006 の間で推移し、主に 0.0006
結論: オフセット offset が小さい場合は、limit を直接使用する方が良いです。これがサブクエリの理由であることは明らかです。
2. オフセットが大きい場合。
select * from yanxue8_visit limit 10000,10
複数回実行しても、時間は約 0.0187 のままです
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000 ,1
) 制限 10
複数回実行すると、時間は約 0.0061 のままで、前の 1/3 にすぎません。オフセットが大きいほど、後者の方が優れていると予想できます。