[MySQLの] LIMITページの最適化

背景:LIMIT 0,20このページングモード、1万人に達し成長しているオフセット値とは、クエリは、クエリは、条件を最適化するためにインデックスを使用することができ、1秒以上が必要になります。

SQL:メンバーから*を選択する場所の状態= 1つの限界0,20; 改写会員ID> = 1及びステータス= 1つの限界20 SELECT * FROM。

スニペット:

/ * *
 *リミットページの最適化
 * @authorエアコム
 * /
$のstartTime =時間();
$条件 = [ 'ステータス'、 '='、1]、 [ 'プラットフォーム'、 '='、1] ]; $カウント =メンバー:: クエリ() - >ここで、($条件 - > ( 'ID' )。 $のpageSize = 20 ; $ PAGENUM = CEIL$カウント / $のpageSize )。 $ startMemberId = 1 ; $ I ; = 1 $ iが <= $ PAGENUM ; $ iは ++ ){ $条件 = [ [ 'ID'、 '> ='、$ startMemberId ]、 [ 'ステータス'、 '='、1]、 [ 'プラットフォーム'、 '='、1] ]; $結果 =メンバー:: クエリ() - >($条件 - > [並べ替え( 'ID'、 'ASC' - >リミット($ pageSizeを - > (GET); もし$結果 - > isNotEmpty()){ $ memberArr = $結果 - > のtoArray(); ディスパッチ(新しい TransferMemberJob($ memberArr )); $ startMemberId = 最大(array_column($ memberArr、 'ID'))+ $のpageSize } { $ startMemberId = $ startMemberId + $のpageSize } $この - >情報(のsprintf( 'ページ=%sの、startMemberId =%s'は、$ I$スタート)MEMBERIDを)。 }

  $ endTimeの時間=();

 
 

  $秒= $のendTimeの- $ startTimeの。
  $時間=はsprintf( '%2F。'、$秒/ 3600);
  $ RPS =はsprintf( '%2F。'、$カウント/ $秒)。
  $ QPS =はsprintf( '%2F'、$ PAGENUM / $秒)。

の$ this  - >インフォ(はsprintf( '%sのクエリ/秒、%sの行/秒、コスト%sの時間、合計%sの行、%S /%sのすべての完成'、日付( 'はYmd H:I:S 」、$のstartTime)、日付( 'はYmd H:I:S'、$ endTimeは)、$数、$時間、$ RPS、$ QPS));

 

リンク:https://www.cnblogs.com/farwish/p/10926820.html

おすすめ

転載: www.cnblogs.com/farwish/p/10926820.html