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)
目次1. 準備Redisイメージを取得する2. Redis Sentinel マスタースレーブモード...
MySQL 結合クエリ1. 基本概念2 つのテーブルの各行をペアで水平に接続して、すべての行の結果を...
この記事では、参考までに、計算機を実装するためのWeChatアプレットの具体的なコードを紹介します。...
MySQL 8.0.16 にインストールする場合、「UTF8B3」ではなく「UTF8B4」が使用さ...
目次挿入バッファとは何ですか?挿入バッファのトリガー条件は何ですか?なぜ一意のインデックスにできない...
JS はホバー ドロップダウン メニューを実装します。これは、フロントエンドの面接で遭遇するシナリ...
需要背景統計インターフェースでは、フロントエンドは 2 つの配列を返す必要があります。1 つは 0 ...
目次1. テスト環境1.1 CentOS 7をインストールする1.2 Docker CE 19.03...
多くの場合、ホームページを作成するときに、Web ページ ヘッダー属性の設定を無視します。 Web ...
要件は次のとおりです。ドメイン名の下に複数のサーバーがあります。現在、特定の地域をテストしています。...
目次1. デフォルトで表示と非表示を切り替える2. スライドして表示と非表示を切り替える3. フェー...
準備Windows Server 2008 R2 Enterprise (2.40GH、8GB、64...
目次Dockerfileを使用してDockerイメージを構築する1. Dockerfile とは何で...
方法1: </html>の後に次のコードを追加してください。コードをコピーコードは次のと...
WeChat 関連サービスをデバッグする場合など、職場のサーバー環境でリモートデバッグを行う必要があ...