序文面接中に「MySQL 5.6」や「インデックス最適化」などの用語を聞いた場合、この質問は「インデックス プッシュダウン」に関するものであることがすぐにわかるはずです。 インデックス プッシュダウンとは何ですか?Index Condition Pushdown (ICP) は、MySQL 5.6 の新機能です。テーブルクエリの数を減らし、クエリの効率を向上させることができます。 インデックスプッシュダウン最適化の原理まず、MySQL の一般的なアーキテクチャを簡単に見てみましょう。 MySQL サービス層は、SQL 構文の解析、実行プランの生成などを担当し、ストレージ エンジン層を呼び出してデータの保存と取得を実行します。 インデックス プッシュのプッシュダウンは、実際には、上位層 (サービス層) が担当するタスクの一部が、処理のために下位層 (エンジン層) に引き渡されることを意味します。 ICP を使用せずに MySQL クエリを詳しく見てみましょう。
ICP を使用する場合、クエリ プロセスは次のようになります。
インデックスプッシュダウンの具体的な実践理論はかなり抽象的なので、実際に実践してみましょう。 ユーザー テーブル tuser を使用して、テーブル内に共同インデックス (名前、年齢) を作成します。 ここで要件がある場合: テーブル内の、名前が Zhang で、年齢が 10 歳のすべてのユーザーを取得します。次に、SQL ステートメントは次のように記述されます。 select * from tuser where name like '张%' and age=10; インデックスの左端一致の原則を理解していれば、このステートメントはインデックス ツリーを検索するときにのみ では次のステップは何でしょうか? ICPは使用されていませんMySQL 5.6 より前では、ストレージ エンジンは結合インデックスを通じて 概略図を見てみましょう。 テーブルを 2 回返す必要があることがわかります。これにより、結合インデックスの他のフィールド age が無駄になります。 ICPの使用MySQL 5.6 以降では、ストレージ エンジンは (name, age) 結合インデックスに基づいて 概略図を見てみましょう。 テーブルが 1 回だけ返されたことがわかります。 さらに、実行プランを確認すると、Extra 列に +----+-------------+----------+-----------+---------+---------------+------------+-------+-------+-------+---------+------------------------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+----------+-----------+---------+---------------+------------+-------+-------+-------+---------+------------------------+ | 1 | SIMPLE | tuser | NULL | 範囲 | na_index | na_index | 102 | NULL | 2 | 25.00 | インデックス条件を使用 | +----+-------------+----------+-----------+---------+---------------+------------+-------+-------+-------+---------+------------------------+ インデックスプッシュダウンの使用条件
インデックス プッシュダウンの目的は、テーブル戻り数を減らすこと、つまり IO 操作を減らすことです。 InnoDB のクラスター化インデックスの場合、データとインデックスは一緒になり、テーブルを返すことはありません。
関連するシステムパラメータインデックス条件プッシュダウンはデフォルトで有効になっており、システム パラメータ optimizer_switch を使用して有効かどうかを制御できます。 デフォルトのステータスを表示します。 mysql> @@optimizer_switch\G を選択します。 ************************** 1. 行 **************************** @@optimizer_switch: index_merge=on、index_merge_union=on、index_merge_sort_union=on、index_merge_intersection=on、engine_condition_pushdown=on、index_condition_pushdown=on、mrr=on、mrr_cost_based=on、block_nested_loop=on、batched_key_access=off、materialization=on、semijoin=on、loosescan=on、firstmatch=on、duplicateweedout=on、subquery_materialization_cost_based=on、use_index_extensions=on、condition_fanout_filter=on、derived_merge=on セット内の 1 行 (0.00 秒) 状態を切り替える: optimizer_switch="index_condition_pushdown=off" を設定します。 optimizer_switch="index_condition_pushdown=on" を設定します。 参照: [1] 「MySQLテクニカルインサイダー:InnoDBストレージエンジン」 [2] MySQL実践45講義 [3] MySQLインデックスプッシュダウン(ICP)の簡単な理解と例 [4] MySQL Index Pushdown (ICP) とは何かを1つの記事で理解する 要約するこれで、MySQL インデックス プッシュダウンに関するこの記事は終了です。MySQL インデックス プッシュダウンに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: フレックスレイアウトとposition:absolute/fixedの競合の詳細な説明
>>: CSS エクスペリエンスを充実させる 5 つの便利な CSS セレクターを紹介します
この記事では、簡単なドラッグ効果を実現するためのjsの具体的なコードを参考までに共有します。具体的な...
序文Crond は Linux のスケジュール実行ツール (Windows のスケジュールされたタス...
目次総合的な比較アクティブの観点から機能的な観点から詳細な比較1. エース2. コードミラー3. モ...
1. Ubuntu Server 18.04.5 LTS システムのインストールUbuntuはデスク...
HTML で境界線を設定する 3 つの方法 境界線の幅: 1px 2px 2px; 境界線のスタイル...
目次1. 技術概要2. 技術的な詳細1. インターフェースからバックエンドデータを取得する2. フロ...
目次プロジェクトにおける一般的な支払い方法Alipay決済微信ペイプロジェクトにおける一般的な支払い...
1. 改行を強制せず、省略記号で終了します。コードをコピーコードは次のとおりです。 <div ...
1. 元のmariadbを削除します。削除しないとmysqlをインストールできません。 mariad...
Linux ホスト名変更コマンド1. ホスト名を一時的に変更するだけの場合は、hostname コマ...
疑問が生じるこの質問は、ファイルのダウンロードを記述しているときに発生しました。HttpServle...
以下のコードはすべて <head>...</head> の間にあり、具体的な...
目次502 不正なゲートウェイ エラーの発生1. 502 不正なゲートウェイ エラーとは何ですか? ...
1. 数学関数ABS(x) xの絶対値を返します。 BIN(x) xの2進値を返します(OCTは8...
以前、MySQLがローカルでは接続できるのにリモートでは接続できないという問題に遭遇したことがありま...