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を使用して画像や添付ファイルをアップロードします

推薦する

nginx をコンパイルしてインストールした後、スムーズに nginx をアップグレードする方法

nginx をコンパイルしてインストールし、一定期間使用した後、現在のバージョンに脆弱性があることや...

MYSQL パフォーマンス アナライザー EXPLAIN 使用例分析

この記事では、例を使用して MYSQL パフォーマンス アナライザー EXPLAIN の使用方法を説...

CSSのline-heightとheightの詳細な説明

最近、CSS インターフェースに取り組んでいるときに、line-height と height とい...

HTML ページ共通スタイル (推奨)

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピーbody、di...

MySQL 8.0.12 winx64 解凍バージョンのインストール グラフィック チュートリアル

mysql-8.0.12-winx64 解凍版のインストールを記録して、みんなで共有しました。 1....

IISMonitor を使用して Web ページを監視し、IIS を自動的に再起動します。

目次1. ツールの紹介2. ワークフロー3. 操作インターフェースとパラメータ設定(1)監視と再起動...

MySQL 8.0.15 インストール グラフィック チュートリアルとデータベースの基礎

MySQLソフトウェアのインストールとデータベースの基礎は参考用です。具体的な内容は次のとおりです。...

Linux プラットフォームでの Zabbix エージェントのインストールと設定方法

ここでは、Linux プラットフォームでの Zabbix エージェントのインストールと構成について簡...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

毎回インストールチュートリアルを探すのは面倒なので、後で確認できるように手順をバックアップします。解...

MySQL で GTID モードをオンラインで有効または無効にする

目次基本的な概要GTIDをオンラインで有効にする1. GTID検証ENFORCE_GTID_CONS...

JavaScript スタイル オブジェクトと CurrentStyle オブジェクトのケース スタディ

1. スタイルオブジェクトスタイル オブジェクトは単一のスタイル宣言を表し、スタイルが適用されている...

Dockerコンテナとホスト間のデータ相互作用の概要

序文実稼働環境で Docker を使用する場合、多くの場合、データを複数のコンテナ間で永続化または共...

Dockerイメージの作成、保存、読み込み方法

イメージを作成する方法は 3 つあります。既存のイメージに基づいてコンテナを作成する、ローカル テン...

Dockerを使用してSpring Bootプロジェクトをデプロイする手順

目次シンプルなSpringbootプロジェクトを作成する1. pom.xmlでSpring Boot...

MySQL での正規表現置換のための replace と regexp の使用法の分析

この記事では、例を使用して、replace と regexp を使用して MySQL で正規表現を置...