MySQL ページネーション クエリの 5 つのメソッド

方法 1:

select * from table order by id 制限 m, n;

非常に簡単です。このステートメントの意味は、m+n レコードをクエリし、最初の m レコードを削除し、最後の n レコードを返すことです。確かにクエリでページネーションを実行できますが、MySQL はすべての m+n レコードをスキャンする必要があるため、m が大きくなるほどクエリのパフォーマンスが低下します。

方法 2:

select * from table where id > #max_id# order by id limit n;

このクエリは最後の n レコードも返しますが、方法 1 のように最初の m レコードをスキャンする必要はありません。ただし、各レコードで前のクエリ (前のページ) の最大 ID (または最小 ID) を取得する方が一般的です。クエリその方法。

もちろん、このクエリの問題は、この ID を取得できない可能性があることです。たとえば、現在 3 ページにいて、5 ページのデータをクエリする必要がある場合、機能しません。

方法 3:

方法2では実現できないクロスページクエリを回避するには、方法1を組み合わせる必要があります。

パフォーマンスが必要なため、m はできるだけ小さくする必要があります。たとえば、現在ページ 3 にいる場合、ページあたり 10 個のデータを使用してページ 5 をクエリする必要があり、ページ 3 の最大 ID が #max_id# である場合、次のようになります。

select * from table where id > #max_id# ID 制限 10、10 で並べ替えます。

この方法は方法 2 の問題を部分的に解決しますが、現在 2 ページにいて 1000 ページを確認したい場合、パフォーマンスは依然として低いです。

方法 4:

select * from table as a inner join (id 制限 m, n でテーブルから ID を選択) as b on a.id = b.id order by a.id;

このクエリは方法 1 と同じであり、m の値は非常に大きい可能性がありますが、内部サブクエリはテーブル全体ではなく id フィールドのみをスキャンするため、パフォーマンスは方法 1 よりも優れており、クロスクエリを解決できます。ページクエリの問題。

方法 5:

select * from table where id > (select id from table order by id 制限 m, 1) 制限 n;

このクエリはサブクエリを通じてフィールド ID もスキャンし、その効果は方法 4 と同じです。ただし、方法 5 は、テーブルの関連付けではなく単純な比較を必要とするため、方法 4 よりもパフォーマンスがわずかに優れており、前のページの最大 ID が不明な場合に推奨される使用法です。

おすすめ

転載: blog.csdn.net/std7879/article/details/125308628