1. はじめにICP (Index Condition Pushdown) は、MySQL 5.6 で導入されたクエリ最適化戦略です。これは、元々サーバー層で実行されていたインデックス条件チェックをストレージ エンジン層にプッシュダウンすることで、テーブル戻りとストレージ エンジン アクセスの数を減らし、クエリ効率を向上させます。 2. 原則ICP の仕組みを理解するには、まず ICP なしで MySQL がどのようにクエリを実行するかを理解しましょう。
ICP を使用する場合、クエリ プロセスは次のようになります。
III. 実践まずテーブルを作成し、レコードを挿入します テーブルユーザーの作成 ( id int(11) NOT NULL AUTO_INCREMENT COMMENT "主キー", name varchar(32) COMMENT "名前", city varchar(32) COMMENT "city", age int(11) コメント "age", 主キー(ID)、 キー idx_name_city(名前、都市) )engine=InnoDB デフォルト文字セット=utf8; ユーザーに挿入(名前、都市、年齢) 値("ZhaoDa", "北京", 20),("QianEr", "上海", 21),("SunSan", "広州", 22), ("LiSi", "深圳", 24), ("ZhouWu", "寧波", 25), ("WuLiu", "杭州", 26), ("ZhengQi", "南寧", 27), ("WangBa", "銀川", 28), ("LiSi", "天津", 29), ("ZhangSan", "南京", 30), ("CuiShi", "鄭州", 65), ("LiSi", "昆明", 29), ("LiSi", "鄭州", 30); テーブルレコードを確認する mysql> ユーザーから * を選択します。 +----+----------+----------+------+ | ID | 名前 | 都市 | 年齢 | +----+----------+----------+------+ | 1 | 趙大 | 北京 | 20 | | 2 | 千二 | 上海 | 21 | | 3 | サンサン | 広州 | 22 | | 4 | LiSi | 深圳 | 24 | | 5 | 周武 | 寧波 | 25 | | 6 | 烏柳 | 杭州 | 26 | | 7 | 鄭斉 | 南寧 | 27 | | 8 | 王巴 | 銀川 | 28 | | 9 | リーシ | 天津 | 29 | | 10 | 張三 | 南京 | 30 | | 11 | 崔市 | 鄭州 | 65 | | 12 | リーシ | クンミン | 29 | | 13 | リーシ | 鄭州 | 30 | +----+----------+----------+------+ セット内の行数は 13 です (0.00 秒) このテーブルには結合インデックス (name, city) が作成されていることに注意してください。次のステートメントをクエリするとします。 name="LiSi" かつ city like "%Z%" かつ age > 25 であるユーザーから * を選択します。 3.1 インデックスプッシュダウンを使用しないインデックス プッシュダウンを使用しない場合、ジョイント インデックスの「左端一致」の原則に従って、name 列のみがインデックスを使用できます。city 列はあいまい一致であるため、インデックスを使用できません。このときの実行プロセスは次のとおりです。
絵を描いてみましょう: インデックス条件プッシュダウンは使用されません 3.2 インデックスプッシュダウンの使用インデックス プッシュダウンを使用する場合、実行プロセスは次のようになります。
絵を描いてみましょう:
また、実行プランからインデックスプッシュダウンが使用されていることもわかります(Extraにインデックス条件の使用が表示されます) mysql> explain select * from user where name="LiSi" and city like "%Z%" and age > 25; +----+-------------+--------+-----------+--------+---------------+---------------+---------+-------+---------+---------+------------------------------------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+--------+-----------+--------+---------------+---------------+---------+-------+---------+---------+------------------------------------+ | 1 | SIMPLE | user | NULL | ref | idx_name_city | idx_name_city | 99 | const | 4 | 7.69 | インデックス条件の使用; where の使用 | +----+-------------+--------+-----------+--------+---------------+---------------+---------+-------+---------+---------+------------------------------------+ セットに 1 行、警告 1 件 (0.00 秒) IV. 利用条件
5. 関連するシステムパラメータインデックス条件プッシュダウンはデフォルトで有効になっており、システム パラメータ 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" を設定します。 要約するMySQL Index Pushdown (ICP) についての説明はこれで終わりです。MySQL Index Pushdown (ICP) の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: フレックスレイアウトにおける画像変形の解決策の詳細な説明
この記事では、Jingdongの虫眼鏡効果を実現するためのJavaScriptの具体的なコードを紹介...
ブラウザ (Web ドライバー) ベースの Selenium テクノロジを使用してデータをクロールす...
n 個のアイテムがあり、これらのアイテムをグリッド レイアウトの列に並べ替える必要があるとします。列...
この記事では、検証コード機能を実装するためのvue+spring bootの具体的なコードを例として...
例示するDML(データ操作言語)とは、データベースの追加、削除、変更を行うための操作命令のことです。...
序文Linux では、スワップ パーティションとスワップ ファイルの 2 種類のスワップ領域を作成で...
1. Dockerをインストールします。参考URL: Docker 入門インストールチュートリアル ...
この記事の例では、グラフィック検証コードを実装するためのVueプロジェクトの具体的なコードを参考まで...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
目次1. スタック構造を理解する2. スタック構造のカプセル化3. 10進数を2進数に変換する1. ...
基礎位置の一致順序は、「最初に正規表現に一致し、次に共通表現に一致」です。実際のロケーションの一致順...
イメージを構築するイメージを構築するには、主に 2 つの方法があります。実行中のコンテナをイメージに...
これは、VPS サーバー用の一般的なワンクリック パフォーマンス テスト スクリプトです。マシンの構...
1. 画像の下にある数ピクセルの空白を削除するにはどうすればよいですか?コードをコピーコードは次のと...
目次成果を達成する利用可能なプラグインの紹介ニーズに応じてプラグインを選択するプラグインのインストー...