MySQLのジョイントインデックス機能の分析と使用例

MySQLのジョイントインデックス機能の分析と使用例

この記事では、例を使用して、MySQL 共同インデックスの機能と使用方法を説明します。ご参考までに、詳細は以下の通りです。

結合指数は複合指数とも呼ばれます。複合インデックスの場合: MySQL はインデックス内のフィールドを左から右に使用します。クエリではインデックスの一部のみ、つまり左端の部分のみを使用できます。たとえば、インデックスはキーインデックス (a,b,c) です。a | a,b | a,b,c の 3 つの組み合わせの検索はサポートできますが、b,c の検索はサポートしていません。左端のフィールドが定数参照の場合、インデックスは非常に効果的です。

2 つ以上の列のインデックスは複合インデックスと呼ばれます。

インデックス内の追加の列を使用すると検索の範囲を絞り込むことができますが、2 つの列を持つ 1 つのインデックスを使用することは、2 つの個別のインデックスを使用することとは異なります。複合インデックスの構造は電話帳に似ており、人の名前は姓と名で構成されます。電話帳は、最初に姓のペアで並べ替えられ、次に同じ姓を持つ人の名前のペアで並べ替えられます。電話帳は、姓がわかっていれば非常に便利ですが、名と姓の両方がわかっていればさらに便利ですが、名しかわかっていなければ役に立ちません。

したがって、複合インデックスを作成するときは、列の順序を慎重に考慮する必要があります。複合インデックスは、インデックス内のすべての列または最初の数列のみを検索する場合に便利です。ただし、後続の列のみを検索する場合には役立ちません。

たとえば、名前、年齢、性別の複合インデックスを作成します。

テーブルテストを作成(
整数、
b 整数、
c 整数、
キーa(a,b,c)
);

 
最適: a=10 かつ b>50 のテストから * を選択
悪い例: a>50 のテストから * を選択します

楽観的: テスト順序から*を選択
悪い例: select * from test order by b
悪い例: select * from test order by c

最適: select * from test where a=10 order by a
最適: select * from test where a=10 order by b
悪い例: select * from test where a=10 order by c

最適: a>10 の順序でテストから * を選択
悪い例: select * from test where a>10 order by b
悪い例: select * from test where a>10 order by c

最適: select * from test where a=10 and b=10 order by a
最適: select * from test where a=10 and b=10 order by b
最適: select * from test where a=10 and b=10 order by c

最適: select * from test where a=10 and b=10 order by a
最適: select * from test where a=10 and b>10 order by b
悪い例: select * from test where a=10 and b>10 order by c

 

インデックス作成の原則

1. インデックスは少ないほど良い

理由: 主にデータを変更するときに、すべてのインデックスを更新する必要があり、書き込み速度が低下します。

2. 最も狭いフィールドはキーの左側に配置されます

3. ファイルの並べ替え、一時テーブル、テーブルスキャンを避けます。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL インデックス操作スキルの概要」、「MySQL 共通関数の概要」、「MySQL ログ操作スキルの概要」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキルの概要」、および「MySQL データベース ロック関連スキルの概要」。

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL ジョイントインデックスの使用ルール
  • MySQL 独立インデックスと共同インデックスの選択
  • MySQL ジョイントインデックス(複合インデックス)の実装
  • MySQLジョイントインデックスの左端一致原則の詳細な分析
  • MySQL ジョイントインデックスの使用例
  • MySQL のジョイントインデックス学習チュートリアル
  • MySQL のインデックス有効条件とインデックス無効条件の結合

<<:  nginx + fastcgi を使用して画像認識サーバーを実装する

>>:  CocosCreatorでゲームコントローラーを使用する方法

推薦する

MySQL最適化ツール(推奨)

序文今日 GitHub を閲覧していたところ、SQL を最適化および書き換えるための sora とい...

IDEAでVUEプロジェクトをデバッグするための詳細な手順

js コードをデバッグするには、コード内にデバッガーを記述するか、Chrome で毎回ブレークポイン...

Linuxフラッシュのインストール方法

Linuxにフラッシュをインストールする方法1. Flashの公式サイトにアクセスし、ダウンロードを...

CSSで半透明の背景色を実現する2つの方法について簡単に説明します。

ページをレイアウトする際、ユーザーに異なる視覚効果を与えるために、div の背景色を半透明の状態に設...

入力できない無効な値はアクションレイヤーに渡すことができません

フォームを入力不可にしたい場合は、フォームを次のように設定します。コードをコピーコードは次のとおりで...

Mysql インデックスと Redis ジャンプテーブルについての簡単な説明

まとめインタビュー中、MySQL インデックスの問題について議論しているときに、B+ ツリー、B ツ...

Vue で変数式セレクターを実装する方法

目次HTML構造の定義入力タグのバインディング属性入力タグはキーダウンイベントをリッスンしますli ...

ウェブサイトのビジュアルデザインの重要なポイント

手工芸デザインからグラフィックデザイン、そしてウェブデザインまで、デザインの原則は同じままですが、私...

IE6では画像要素imgに余分な空白スペースがある

ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...

Alibaba Cloud Server の詳細な展開 (グラフィック チュートリアル)

最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...

Vue.jsはタイムライン機能を実装します

この記事では、タイムライン機能を実装するためのVue.jsの具体的なコードを参考までに共有します。具...

MySQLでデータをエクスポートするいくつかの方法の詳細な説明

MySQL データをエクスポートする目的は、データベースのバックアップ、テーブル構造のエクスポート、...

HTML フォーム_PowerNode Java アカデミー

1. フォーム1. フォームの役割HTML フォームは、さまざまな種類のユーザー入力を受け取り、ユー...

Docker-compose チュートリアルのインストールとクイックスタート

目次1. Compose の紹介2. ComposeとDockerの互換性3. Dockerをインス...

初心者のためのMySQL外部キーの設定方法

目次外部キーの役割mysql 外部キー設定方法要約する外部キーの役割データの一貫性、整合性を維持し、...