面接中に「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; インデックスの左端一致の原則を理解していれば、このステートメントはインデックス ツリーを検索するときにのみ使用でき、条件を満たす最初のレコードの ID は 1 であることがわかります。 では次のステップは何でしょうか? ICPは使用されていませんMySQL 5.6 より前では、ストレージ エンジンは結合インデックスを通じて 概略図を見てみましょう。 テーブルを 2 回返す必要があることがわかります。これにより、結合インデックスの他のフィールド age が無駄になります。 ICPの使用MySQL 5.6 以降では、ストレージ エンジンは (name, age) 結合インデックスに基づいて 概略図を見てみましょう。 テーブルが 1 回だけ返されたことがわかります。 さらに、実行プランを確認すると、 +----+-------------+----------+-----------+---------+---------------+------------+-------+-------+-------+---------+------------------------+ | 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" を設定します。 要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: ブラウザのキャッシュを防ぐために、js または css の後に ?v= バージョン番号を追加します。
>>: Flexレイアウトを使用してヘッドの固定コンテンツ領域のスクロールを実現する方法
ドラッグ機能は主に、ドラッグによる並べ替え、ポップアップ ボックスのドラッグと移動など、ユーザーがカ...
最近、要素テーブルを使用すると、並べ替えの問題によく遭遇します。単純な並べ替えであれば、要素の公式が...
Jenkins はオープンソース ソフトウェア プロジェクトです。Java をベースに開発された継続...
シェルスクリプト #!/bin/sh # 現在のディレクトリ CURRENT_DIR=$( cd &...
目次概要1. フックの呼び出し順序2. onChangesフック3. 変更検出メカニズムとDoChe...
目次1. はじめに2. MVCC (マルチバージョン同時実行制御メカニズム) 2.1 繰り返し読み取...
最近、Djangoを学習しているときにデータベースを使用する必要があったため、MySQLで使用するた...
概要: Oracle scottユーザーには4つのテーブルがあり、実験やデータ検証に便利です。現在は...
目次背景1. dns-prefetch とは何ですか? 2. dns-prefetch を設定するに...
目次QRコードログインの真髄QRコードを理解するシステム認証メカニズムQRコードをスキャンしてログイ...
目次エフェクト表示コードリンクキーコード表形式データコンポーネントのネスト検証方法リセット方法完全な...
Dockerfileの作成yumソースを設定する cd /tmp/docker vim Docker...
序文この記事はかなり詳細で、少し面倒です。他のチュートリアル ドキュメントでは多くの手順が省略されて...
これは公式のスクリーンショットです。MySQL 5.7 をインストールすると、デフォルトのパスワード...
1.ターミナルに入ったらPHPのバージョンを確認するphp -v出力は次のようになります。 PHP ...