Aniu は新しい会社に入社したばかりです。彼の最初の仕事は、条件に基づいて注文テーブルのデータをファイルにエクスポートすることでした。Aniu は「これは簡単すぎる」と考え、すぐに次のステートメントを書いて、自分のコードは免除対象製品であることをテスターに伝えました。 声明は次のとおりです。 name='lilei' かつ create_time>'2020-01-01 00:00:00' の注文から * を選択 limit start,end 予想外に、しばらくオンラインになった後、本番環境では早期警告が発行され始め、この SQL は実行時間が 50 秒を超える低速 SQL であり、ビジネスに重大な影響を与えていることがわかりました。 1. テスト実験MySQL ページングでは、limit start、count ページング ステートメントを直接使用します。 製品制限開始、カウントから*を選択 開始ページが小さい場合、クエリのパフォーマンスの問題はありません。次のように、10、100、1000、10000 (ページあたり 20 レコード) からのページングの実行時間を見てみましょう。 積限界から * を選択 10, 20 0.016 秒 積限界から * を選択 100, 20 0.016 秒 積限界から * を選択 1000, 20 0.047 秒 積限界から * を選択 10000, 20 0.094 秒 開始レコードが増加すると時間も増加することがわかりました。これは、ページング ステートメントの制限が開始ページ番号と密接に関係していることを示しています。 製品制限400000、20から*を選択 3.229秒 最後のページの記録が出てくる時間を見てみましょう 製品制限 866613 から * を選択、20 37.44 秒 このようにページ番号が最も大きいページの場合、この時間は明らかに耐えられないほど長いです。 2. 制限ページング問題に対するパフォーマンス最適化手法2.1 テーブルをカバーするインデックスを使用してページングクエリを高速化するインデックス クエリを使用するステートメントにそのインデックス列 (カバー インデックス) のみが含まれている場合、クエリが非常に高速になることは誰もが知っています。 製品制限 866613, 20 から ID を選択 クエリ時間は 0.2 秒で、すべての列をクエリするのに必要な 37.44 秒よりも約 100 倍高速です。 2.2 id>= 形式の使用:製品から*を選択 ID > =(製品制限 866613 から ID を選択、1) 制限 20 クエリ時間は 0.2 秒であり、これは質的な飛躍です。 2.3 結合の使用製品aから*を選択 JOIN (製品制限 866613, 20 から ID を選択) b ON a.ID = b.id 要約:理由を述べていないと思いますか?その理由は、select * を使用する場合、limit 600000 が直接使用され、10 回のスキャンは約 600,000 のデータであり、テーブルに 600,000 回戻る必要があるためです。つまり、パフォーマンスの大部分はランダム アクセスで消費され、最終的に 10 のデータのみが使用されることになります。最初に ID を見つけてから、関連付けによってレコードをクエリすると、インデックスが条件を満たす ID をすばやく見つけて、テーブルに 10 回戻ることができるため、はるかに高速になります。必要なデータを取得できます。 これで、MySQL ページングが制限によってどんどん遅くなる理由についての記事は終わりです。MySQL ページング制限の遅さの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: Docker イメージの最適化 (1.16GB から 22.4MB)
mysqladmin ツールの使用形式は次のとおりです。 mysqladmin [オプション] コ...
1. スケジュールタスクを作成する命令crontab -eは現在のユーザーの編集インターフェースに入...
序文最近、MySQL に関するメモをいくつか尋ねる人がいたので、ブログ記事を書かなければなりません。...
nginxをインストールするnginx-fullをインストールする必要があることに注意してください。...
序文最近、穴を掘ってスペースを作っているだけなので、心が空っぽになっているように感じます。テクノロジ...
目次総合的な比較アクティブの観点から機能的な観点から詳細な比較1. エース2. コードミラー3. モ...
MySQL ログイン パスワードを忘れた場合、解決方法は実はとても簡単です。MySQL メイン構成フ...
MySQL解凍版とNavicatデータベース操作ツールのインストールは、以下のとおりです。 1. M...
1. HTMLファイルでechartをインポートする <!-- echarts をインポート ...
最初に書くこの記事では、ELK 7.3.0 の展開についてのみ説明します。展開環境:システムセントO...
アルファベット順DTD: このタグが許可される XHTML 1.0 DTD を示します。 S=厳密、...
この問題に関して、オンライン リソースをたくさん見つけました。ここにいくつかの方法を示します。コード...
1.ダウンロードしてインストールする公式ウェブサイトからコミュニティ エディションの dmg インス...
JS でアニメーションを記述する場合、移動前に相対位置を絶対位置に変換してからアニメーション機能を実...
XQuery は、XML ドキュメントからデータを抽出するための言語です。 XQuery は、XML...