1. SQL最適化の一般的な手順スローチェックログなどにより実行効率の低い SQL 文を見つけます。 1. SQL実行計画の分析を説明する
上から下へ入力すると、効率がどんどん高まります
上から下に向かって効率はどんどん高くなっていますが、コスト モデルによると、2 つのインデックス idx1(a, b, c) と idx2(a, c) があるとします。SQL は「select * from t where a = 1 and b in (1, 2) order by c」です。idx1 を使用する場合、タイプは range で、idx2 を使用する場合、タイプは ref です。スキャンする行数が idx1 の約 5 倍の場合は idx1 が使用され、それ以外の場合は idx2 が使用されます。 余分な
2. プロフィール分析を表示SQL 実行スレッドのステータスと消費時間を把握します。 プロフィールを表示; クエリ #{id} のプロファイルを表示します。 3. トレーストレース アナライザーは、トレース ファイルを使用して、オプティマイザーが実行プランを選択する方法を分析します。トレース ファイルを使用すると、クーポンが実行プラン B ではなく実行プラン A を選択する理由をさらに理解できます。 optimizer_trace を「enabled=on」に設定します。 optimizer_trace_max_mem_size を 1000000 に設定します。 information_schema.optimizer_trace から * を選択します。 4. 問題を特定し、適切な措置を講じる
2. シナリオ分析(ケーススタディ)1. 左端の一致索引 キー `idx_shopid_orderno` (`shop_id`,`order_no`) SQL ステートメント orderno='' の _t から * を選択 クエリは左から右に一致します。order_no インデックスを使用するには、クエリ条件に shop_id が含まれるか、インデックス (shop_id、order_no) が入れ替わる必要があります。 2. 暗黙的な変換索引 キー `idx_mobile` (`mobile`) SQL ステートメント _user から * を選択、モバイル = 12345678901 暗黙的な変換は、インデックスに対して操作を実行することと同じであり、インデックスが無効になります。 Mobile は文字型です。数値を使用する場合は、文字列の一致を使用する必要があります。そうしないと、MySQL は暗黙的な置換を使用し、インデックスが失敗します。 3. 大規模なページング索引 キー `idx_a_b_c` (`a`, `b`, `c`) SQL ステートメント select * from _t where a = 1 and b = 2 order by c desc limit 10000, 10; 大規模なページング シナリオでは、製品の最適化要件を優先できます。最適化がない場合、次の 2 つの最適化方法があります。 1 つの方法は、最後のデータ、つまり上記の c を渡してから、「 もう 1 つの方法は、遅延関連付けを使用して SQL テーブルの戻りを減らすことですが、効果を上げるにはインデックスが完全にカバーされている必要があることに注意してください。SQLの変更は次のとおりです。 _t t1 から t1.* を選択します (_t から id を選択します。ここで、a = 1、b = 2、order by c、desc limit 10000、10)、t2 で t1.id = t2.id になります。 4. in + order by索引 キー `idx_shopid_status_created` (`shop_id`、`order_status`、`created_at`) SQL ステートメント select * from _order where shop_id = 1 and order_status in (1, 2, 3) order by created_at desc limit 10 基盤となる MySQL では、 解決策: ( 5. 範囲クエリがブロックされ、後続のフィールドにインデックスを作成できない索引 キー `idx_shopid_created_status` (`shop_id`、`created_at`、`order_status`) SQL ステートメント shop_id = 1 かつ created_at > '2021-01-01 00:00:00' かつ order_status = 10 である _order から * を選択 範囲クエリには「 6. 等しくない、含まない、インデックスを使用できない高速検索ICPは使用可能 shop_id=1 かつ order_status が (1,2) に該当しない _order から * を選択します。 shop_id=1 かつ order_status != 1 の場合、_order から * を選択します。 インデックスでは 7. オプティマイザがインデックスを使用しないことを選択した場合アクセスする必要があるデータの量が少ない場合、オプティマイザは補助インデックスを選択します。ただし、アクセスされるデータがテーブル全体のデータの大部分 (通常は約 order_status = 1 の場合、_order から * を選択します。 未払いの注文をすべて照会します。通常、このような注文は非常に少ないため、インデックスを作成しても使用できません。 8. 複雑なクエリa = 1 かつ b が (1, 2, 3) の範囲内であり、c > '2020-01-01' である場合に、_t から sum(amt) を選択します。 a = 1 かつ b が (1, 2, 3) の範囲内であり、c > '2020-01-01' が制限 10 である _t から * を選択します。 特定のデータをカウントする必要がある場合は、データ ウェアハウスを使用して問題を解決できます。 ビジネス クエリが非常に複雑な場合は、SQL を引き続き使用するのではなく、ES を使用するなど、他の方法で解決することが推奨される場合があります。 9. 昇順と降順の混在a=1 で _t から * を選択し、b 降順、c 昇順で並べ替えます descとascを混在させるとインデックスエラーが発生します 10. ビッグデータプッシュ サービスのデータ ストレージの場合、データ量が非常に大きくなる可能性があります。ソリューションを選択する場合、最終的には MySQL に保存し、有効期間を 7 日間に設定して保存することを選択する場合があります。 次に、頻繁なデータクリーニングによってデータの断片化が発生することに注意し、データの断片化を処理するために DBA に連絡する必要があります。 これで、MYSQL の最適化の典型的なケース シナリオのトップ 10 に関するこの記事は終了です。より関連性の高い MYSQL の最適化のケース シナリオについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: DIVマスクを使用して、マウスでチェックボックスを直接チェックすることが無効である問題を解決します
>>: 2012年のベストWebデザイン作品レビュー[パート1]
目次モードパラメータハッシュ履歴ハッシュ履歴.push()ハッシュ履歴.replace()アドレスバ...
需要シナリオ: 既存の PXC 環境には大量のデータがあります。新しく購入したサーバーをこのクラスタ...
最近では、モバイルデバイスがますます普及しており、ユーザーがスマートフォンやタブレットを使用して W...
MySQL における Regexp の一般的な使用法特定の文字列を含むあいまい一致# コンテンツフィ...
HTML 初心者は、ファイルを正しく参照する方法という問題によく遭遇します。たとえば、HTML ペー...
達成される効果は次のとおりです。 マウスがボタン内に移動すると、ネオンライトのような効果が生成され、...
今日ふと、HTML でチェックボックスのスタイルを変更できる範囲が限られていることと、チェックボック...
序文インターネット上には、MySQL でインデックスにヒットできないさまざまな状況をまとめた記事がよ...
表のキャプションは表の上または下に配置でき、プロパティで調整できます。デフォルトのテーブル タイトル...
Keepalive は Vue プロジェクトでのキャッシュによく使用され、基本的な要件を満たすのに非...
仮想化ソフトウェアをインストールする仮想マシンにオペレーティング システムをインストールする前に、ホ...
結果:実装コードhtml <div class='iphone'> &l...
始める前に、process.env.NODE_ENV にはデフォルトで開発と本番の 2 つの状態しか...
前回の記事ではMySql8.0.19のインストール手順を紹介しました。必要な方はクリックしてご覧くだ...
ファイルコントロールを美しくする理由は何ですか?他の子供たちはみんなきちんとしたきれいな服を着ている...