ビッグデータ量でmysqlのページングクエリーを最適化する方法
631 ワード
/********* 1001 10 ********/
# sql (limit offset,rows)
select * from auth_user limit (1001-1)*10,10;
# django orm ( sql )
User.objects.all()[10000,10010]
上記のように、多くのウェブサイトのページング機能の下位実装は、limitと組み合わせてページングを制御するために、フロントエンドからバックエンドにいくつかのパラメータ、例えば開始ページとページサイズに依存することである.
しかし、ビッグデータ量ではクエリー効率の問題が発生します!!!上記の文の実際の下位実行は、最初の行から10010行を見つけ、前の10000行を捨てるためです.従って、ユーザが1001ページ後ろにスクロールすると、オフセットoffsetが大きく(10000)、実際の実行効率が遅い.
一般に、代替方法は、where文が開始ビットを設定し、limitが行数を制御することである.
select * from auth_user where id >= 10000 limit 10;
User.objects.filter(id__gte=10000)[0,10];