MySQL の結合テーブルにインデックスを作成する方法

MySQL の結合テーブルにインデックスを作成する方法

この記事では、MySQL で 2 つのテーブルを関連付ける結合テーブルにインデックスを作成する方法を紹介します。参考までに共有します。詳細な紹介を見てみましょう。

問題の紹介

データベース インデックスを作成するときに、単一列インデックスまたは複合インデックスを選択できます。

次の状況では、ユーザー テーブル (user) と部門テーブル (dept) は、次の図に示すように、部門ユーザー関連付けテーブル (deptuser) を介して接続されています。


テーブル間の関係

問題は、この関連テーブルにインデックスを作成する方法です。

このテーブルには 4 つのオプションがあります。

  • user_uuid の単一列インデックス idx_user を作成します。
  • user_dept の単一列インデックス idx_dept を作成します。
  • 複合インデックスidx_user_dept(user_uuid、dept_uuid)を作成します。
  • 複合インデックスidx_dept_user(つまり、(dept_uuid、user_uuid))を作成します。

関連テーブルをクエリする状況は 4 つあります。

-- 1. AND メソッドを使用して、個人が所属する部門を確認します。 EXPLAIN SELECT d.dept_name,u.* FROM org_dept d,org_user u,org_dept_user duser WHERE u.user_uuid=duser.user_uuid AND d.dept_uuid=duser.dept_uuid AND u.user_code="dev1";
-- 2. 結合メソッドを使用して、担当者が所属する部門を確認します。 EXPLAIN SELECT d.dept_name,u.* FROM org_user u LEFT JOIN org_dept_user du ON u.user_uuid=du.user_uuid LEFT JOIN org_dept d ON du.dept_uuid=d.dept_uuid WHERE u.user_code="dev1";
-- 3. AND メソッドを使用して、部門別に人員を確認します。 EXPLAIN SELECT d.dept_name,u.* FROM org_dept d,org_user u,org_dept_user du WHERE u.user_uuid=du.user_uuid AND d.dept_uuid=du.dept_uuid AND d.dept_code="D006";
-- 4. 結合メソッドを使用して、部門内の人員を確認します。 EXPLAIN SELECT d.dept_name,u.* FROM org_dept d LEFT JOIN org_dept_user du ON d.dept_uuid=du.dept_uuid LEFT JOIN org_user u ON u.user_uuid=du.user_uuid WHERE d.dept_code="D006";

テスト検証

1.人事チェック部門と方法

1.1 関連テーブルにインデックスがない


1.2 単一インデックス Idx_dept


1.3 単一インデックス Idx_user


1.4 複合インデックス Idx_dept_user


1.5 複合インデックス Idx_user_dept


1.6 すべて構築済み


2. joinメソッドを使用して、担当者が所属する部門を確認します。

2.1 関連テーブルにインデックスがない

2.2 単一インデックス Idx_dept


2.3 単一インデックス Idx_user

2.4 複合インデックス Idx_dept_user


2.5 複合インデックス Idx_user_dept


2.6 すべてが構築されている


3. 部門はAND方式で人員をチェックする

3.1 関連テーブルにインデックスがない

3.2 単一インデックス Idx_dept


3.3 単一インデックス Idx_user


3.4 複合インデックス Idx_dept_user


3.5 複合インデックス Idx_user_dept


3.6 すべてが構築されている


4. 部門は人員をチェックするために参加する

4.1 関連テーブルにインデックスがない


4.2 単一インデックス Idx_dept


4.3 単一インデックス Idx_user

4.4 複合インデックス Idx_dept_user


4.5 複合インデックス Idx_user_dept


4.6 すべてが構築されている

結論は

上記の実際のテスト結果から、次の結論を導き出すことができます。この関連テーブルでは、user_uuid と dept_uuid に対してそれぞれ単一列のインデックス idx_user と idx_dept を作成するのが最適です。

インデックス idx_user は、個人 ID を通じて個人の部門を照会する場合に適用できます。インデックス idx_dept は、部門を通じて部門下の個人を照会する場合に適用できます。

他の

テストデータ

テスト.sql

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL と Oracle のデータ型の対応 (表形式)
  • MySQL でデータ テーブルを作成し、主キーと外部キーの関係を確立する方法の詳細な説明
  • MySQL 外部キー制約とテーブル関係の概要
  • Pythonはdict辞書型のデータをMysqlに保存し、テーブルと列を自動的に作成します
  • MySQL と PHP の基礎と応用トピック: データベース テーブルの作成
  • MySQL で 800 万エントリのテスト データ テーブルをすばやく作成する方法
  • MySQLは実際には3つの関係テーブルを作成します

<<:  画像のプリロードと遅延ロードを実装するJavaScript

>>:  Baidu の https 認証プロンプト「http サイトを 301 から https サイトにリダイレクトしてください」の解決方法の詳細な説明

推薦する

DHTML オブジェクト (さまざまな HTML オブジェクトの共通プロパティ)

!DOCTYPE HTML ドキュメントが準拠するドキュメント型定義 (DTD) を指定します。 ...

本番環境でのMySQLパラメータsql_safe_updatesの使用に関する詳細な説明

序文アプリケーションのバグや DBA の誤操作が発生した場合、テーブル全体が更新される可能性がありま...

デカルト積原理を使用してMySQLで複数のテーブルをクエリする方法を簡単に説明します。

MySQL マルチテーブルクエリ (直積原理)まず、データが使用するテーブルを決定します。デカルト...

CentOS7にsshをインストールして設定する

1. openssh-serverをインストールする yum インストール -y openssl o...

Windows10でのMySQL 5.7.21のインストールと設定のチュートリアル

この記事では、MySQL 5.7.21 のインストールと設定方法を記録し、皆様と共有します。 1. ...

Docker イメージを削除できません エラー: そのようなイメージはありません: xxxxxx 解決策

序文docker イメージを削除できません。docker docker imagesを確認すると、イ...

MySQL 5.7 のキーワードと予約語の詳細な説明

序文MySQL と Oracle のキーワードはまったく同じではありません。Oracle データベー...

MySQLコマンドラインでSQLファイルを実行するいくつかの方法

目次最初の方法: MySQLデータベースが接続されていない場合2 番目の方法: データベースがすでに...

新しい CSS display:box プロパティの詳細な説明

1. ディスプレイボックス;要素にこのプロパティを設定すると、display:inline-bloc...

MySQL 基本チュートリアル: DML ステートメントの詳細な説明

目次DMLステートメント1. レコードを挿入する2. 記録を更新する3. シンプルなクエリレコード4...

JavaScriptは行削除機能を備えたテーブルを動的に生成します

この記事の例では、テーブルを動的に生成したり行を削除したりするためのJavaScriptの具体的なコ...

MySQL 8.0 の統計が不正確である理由

序文Oracle であれ MySQL であれ、新バージョンで導入された新機能は、一方では製品の機能性...

MySQL クエリにおける LIMIT の大きなオフセットによって引き起こされるパフォーマンス低下の分析

序文MySQLクエリはselectコマンドを使用し、limitとoffsetパラメータを使用して、指...

Nginx 運用保守ドメイン名検証方法例

インターフェイス ドメイン名を構成する際、各パブリック プラットフォームはドメイン名に対する開発者の...

Vue ブラウザログアウトの実装例

目次1. beforeunload イベント2. アンロードイベント3. ソースコードプロジェクトの...