また、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,1
複数回実行すると、時間は約 0.0187 のままです
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000,1
) limit 10
複数回実行、時間は約 0.0061 にとどまり、前の 1/3 にすぎません。オフセットが大きいほど、後者の方が優れていると予想できます。