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 サイトにリダイレクトしてください」の解決方法の詳細な説明

推薦する

Vueでパスワードの表示と非表示機能を実装するアイデアを詳しく解説

効果: アイデア:入力タイプ属性を使用して、タイプ値がテキストの場合はパスワードを表示し、タイプ値が...

Ubuntu 20.04は静的IPアドレスを設定します(異なるバージョンを含む)

Ubuntu 20.04はnetplanを通じてネットワークを管理するため、以前のバージョンとは少...

MySQL 外部キー制約の詳細な説明

公式ドキュメント: https://dev.mysql.com/doc/refman/5.7/en/...

Nginxはドメイン名のアクセス方法を定義しています

最近Nginxを構築しているのですが、ドメイン名でアクセスできません。 nginx 構成ファイル n...

JavaScript のプライベート クラス フィールドと TypeScript のプライベート修飾子の詳細な説明

目次JavaScript のプライベート クラス フィールドとプライバシーの必要性JavaScrip...

UbuntuでOpenCVをコンパイルしてインストールする方法

opencv2 の簡単なインストール: conda インストール --channel https:/...

JavaScript の手ぶれ補正とスロットリングの説明

目次安定スロットリング要約する安定自動ドアは人を感知してドアを開け、5 秒間のカウントダウンを開始し...

IE8は優れたエクスペリエンスを提供します: アクティビティ

今日は IE8 ベータ 1 (以下、IE8 と略します) をチラ見しました。IE8 は素晴らしい体験...

MySQL テーブル結合クエリでグループ化と重複排除を実装する例

目次ビジネスロジックデータテーブル構造クエリロジックSQL スクリプトスクリプトの説明ビジネスロジッ...

MySQL空間関数を使用してロケーションパンチインを実装するための完全な手順

序文プロジェクトの要件は、ユーザーの現在の位置が特定の地理的位置範囲内にあるかどうかを判断することで...

共有サイドバーを実装するためのネイティブJS

この記事では、ネイティブ JS で実装された共有サイドバーを紹介します。効果は次のとおりです。 以下...

Alibaba Cloud Centos7.X で外部にポートを開く方法

一言で言えば、大手メーカーからクラウド サーバーを購入する場合は、セキュリティ グループに移動して、...

mysql バックアップ戦略の実装 (フルバックアップ + 増分バックアップ)

目次設計シナリオ技術的なポイントサーバー情報準備フルバックアップスクリプト(Mysql-FullyB...

Linux で MySQL をインストールする簡単な方法

Linux に MySQL をインストールする方法をオンラインで検索すると、多くの方法が表示されまし...

レンダリング関数を使用して、拡張性の高いコンポーネントをカプセル化する

必要:バックグラウンド管理では、次のようなレイアウトでデータを表示する必要があることがよくあります。...