MySQLの複合インデックス方式の詳細な説明

MySQLの複合インデックス方式の詳細な説明

どの DBMS でも、インデックスは最適化にとって最も重要な要素です。データ量が少ない場合、適切なインデックスがなくても大きな影響はありませんが、データ量が増えるとパフォーマンスが急激に低下します。

複数の列にインデックスを付ける場合 (複合インデックス)、列の順序は非常に重要です。MySQL は、インデックスの左端の列のプレフィックスのみを効果的に検索できます。例えば:

複合インデックス (c1, c2) があると仮定すると、クエリselect * from t1 where c1=1 and c2=2このインデックスを使用できます。クエリselect * from t1 where c1=1でもこのインデックスを使用できます。ただし、クエリ ステートメントselect * from t1 where c2=2複合インデックスの先頭列がないため、このインデックスを使用できません。つまり、検索に c2 列を使用するには、c1 が特定の値に等しくなければなりません。

例えば:
book(書籍テーブル)とbookclass(書籍分類テーブル)の2つのテーブルを作成します。

b.CATEGORY_ID = 1 の場合、書籍 b から b.ISBN を選択します。 

這里寫圖片描述

実行時間: 0.053秒

explain を使用して SQL を分析します。

這里寫圖片描述

type = ALL Extra=where を使用すると、完全なテーブル クエリではインデックスが使用されません。

EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合する方法を示します。より適切なインデックスを選択し、より最適化されたクエリ ステートメントを記述するのに役立ちます。

ALL 前のテーブルの行の組み合わせごとに、完全なテーブルスキャンが実行されます。テーブルが const としてマークされていない最初のテーブルである場合、これは通常悪い結果となり、それ以外の場合にも通常非常に悪い結果となります。多くの場合、ALL を使用する代わりにインデックスを追加して、前のテーブルの定数値または列値に基づいて行を取得できます。

複合インデックスを作成します。
書籍(CATEGORY_ID、ISBN)にインデックスindex_isbnを作成します。

SQLを再度実行すると、時間が0.009秒に短縮されていることがわかります。

這里寫圖片描述

explain を使用して SQL を分析します。

這里寫圖片描述

type = ref、Extra = Using index インデックスクエリが使用されます。

ref 前のテーブルの行の組み合わせごとに、一致するインデックス値を持つすべての行がこのテーブルから読み取られます。結合でキーの左端のプレフィックスのみが使用される場合、またはキーが UNIQUE または PRIMARY KEY ではない場合 (つまり、結合でキーに基づいて単一の行を選択できない場合) は、ref が使用されます。この結合タイプは、使用されるキーが少数の行にのみ一致する場合に適しています。

MySQLの結合インデックス方式の詳細な説明については、これで終わりです。MySQLの結合インデックスに関するより詳しい内容については、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySql インデックスはクエリ速度を向上させる一般的な方法のコード例
  • MySQL インデックスが失敗するいくつかの状況の概要
  • MySQLのクラスタ化インデックスと非クラスタ化インデックスの詳細な説明
  • MySQL インデックスのパフォーマンス最適化の問題に対する解決策
  • MySQL インデックスの失敗を引き起こす一般的な書き込み方法の概要
  • さまざまな種類のMySQLインデックス
  • MySQL パフォーマンスの最適化: インデックスを効率的かつ正しく使用する方法
  • MySQLインデックスの基本構文
  • MySQLが間違ったインデックスを選択する理由と解決策

<<:  Linux は suid vim.basic ファイルを使用して権限昇格を実現します。

>>:  VueはOSSを使用して画像や添付ファイルをアップロードします

推薦する

跳ねるボールを実現するネイティブjs

思いつきで、小さなボールが跳ね返るケーススタディを書いてみました。具体的な内容は以下のとおりです。主...

CSS3 クリアフロートメソッドの例

1. 目的この記事を通じて、誰もがフロートをクリアする原理と方法を理解し、最終的にこの記事が最良であ...

Dockerイメージ構築原理の分析(Dockerをインストールしなくてもイメージを構築できる)

イメージの構築は、DevOps プロセスにおいて非常に重要なプロセスです。一般的に、イメージの構築と...

MySQL トランザクション分離レベルの詳細

serializableシリアル化(問題なし)トランザクションは順次実行する必要があります。前のトラ...

Linux で MySQL 5.7.19 をアンインストールする方法

1. MySQLが以前にインストールされていたかどうかを確認するコマンド: rpm -qa|grep...

HTML テーブルタグチュートリアル (17): テーブルタイトルの垂直配置属性 VALIGN

表のキャプションは表の上または下に配置でき、プロパティで調整できます。デフォルトのテーブル タイトル...

IDEA が Docker を統合してリモート展開を実現するための詳細な手順

1. Dockerサーバーへのリモートアクセスを有効にするdocker が配置されているリモート サ...

ベスト HTML/CSS デザインおよび開発フレームワーク 15 選を紹介します

プロフェッショナルな Web デザインは複雑で時間がかかります。 HTML と CSS フレームワー...

React forwardRefの使い方と注意点

これまで react.forwardRef は react の高階コンポーネントには適用できませんで...

Nodeはリクエスト追跡にasync_hooksモジュールを使用します

async_hooks モジュールは、Node.js バージョン 8.0.0 に正式に追加された実験...

proxy_pass を設定した後に Nginx が 404 を返す問題を解決する

目次1. proxy_pass を設定した後に Nginx が 404 を返す問題のトラブルシューテ...

MySql ページングで limit+order by を使用する場合のデータ重複の解決策

目次まとめ問題の説明問題を分析する問題を解決するまとめ複雑な知識をシンプルに説明できることは重要です...

プロジェクトにaxiosをカプセル化する実際のプロセス

目次序文axiosカプセル化の利点パッケージのアイデア設定の優先順位axiosインスタンス構成1. ...

MySQL 永続統計の詳細な説明

1. 永続的な統計情報の重要性:統計は、MySQL が実行プランを生成するためのガイドとして使用され...

bash のスクリプトデバッグメカニズムの詳細な説明

スクリプトをデバッグモードで実行するbash -x <script> を使用すると、スク...