mysq limit文のoffset値が大きすぎる問題

497 ワード

全テーブルをページングするプログラムではoffset値が大きすぎるとクエリ速度が遅くなります.これはoffset値を指定するとmysqlがoffset+rowsのレコード数を検索し、検索レコード数が大きすぎるためです.
この問題を解決する方法は次のとおりです.
1、主キーの条件クエリーwhereをlimitのoffsetオフセット量の代わりに使用する機能.例えば、where id>offset order by id limit rows、各ページの戻りレコードの最大id値は新しいoffset値である.
2、プライマリ・キー・インデックスをクエリーし、インデックス・オーバーライド・プロパティを使用して各ページのidリストを見つけ、サブテーブルjoinの下のデータに必要なカラムを返します.次のようになります.
select * from table_name inner join ( select id from table_name where (user = xxx) limit 10000,10) b