Maison  >  Article  >  base de données  >  Explication graphique et textuelle détaillée sur la façon de créer un index pour une table de jointure liée à deux tables dans MySQL

Explication graphique et textuelle détaillée sur la façon de créer un index pour une table de jointure liée à deux tables dans MySQL

小云云
小云云original
2018-01-13 16:26:055833parcourir

Cet article vous présente, à travers des images et du texte, les informations pertinentes sur la façon de créer un index pour la table de connexion liée à deux tables dans MySQL. L'introduction dans l'article est très détaillée et a une certaine valeur de référence et d'apprentissage pour tout le monde. Les amis qui en ont besoin peuvent le lire ensemble.

Introduction au problème

Créer un index pour la base de données Vous pouvez choisir un index à une seule colonne ou créer un index combiné.

Dans la situation suivante, la table des utilisateurs (user) et la table du département (dept) sont connectées via la table d'association des utilisateurs du département (deptuser), comme le montre la figure suivante :


Relations entre tables

La question est, comment créer un index dans cette table liée ?

Pour cette table, il existe quatre options :

  • Créer un index à une seule colonne idx_user pour user_uuid

  • Pour user_dept Créer un index à une seule colonne idx_dept

  • Construire un index combiné idx_user_dept, c'est-à-dire (user_uuid, dept_uuid)

  • Construire un index combiné idx_dept_user, c'est-à-dire (dept_uuid, user_uuid)

Il existe quatre situations pour interroger les tables associées :

-- 一、人员查所属部门用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";
-- 二、人员查所属部门用join方式
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";
-- 三、部门查人员用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";
-- 四、部门查所属人员用join方式
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";

Test de vérification

1. service auquel appartient le personnel Utiliser la méthode et

1.1 Aucun index pour les tables associées


1.2 Index unique Idx_dept


1.3 Index unique Idx_user


1.4 Index combiné Idx_dept_user


1.5 Index combiné Idx_user_dept


1.6 Tous sont créés sur


2. Utilisé pour vérifier le service auquel appartient le personnel Méthode de jointure

2.1 Aucun index pour la table associée

2.2 Index unique Idx_dept


2.3 Index unique Idx_user

2.4 Index combiné Idx_dept_user


2.5 Indice combiné Idx_user_dept


2.6 Tous sont établis


3. Utilisez la méthode AND pour vérifier le personnel dans les départements

3.1 La table associée n'a pas d'index

3.2 Index unique Idx_dept


3.3 Index unique Idx_user


3.4 Index combiné Idx_dept_user


3.5 Indice combiné Idx_user_dept


3.6 Tous sont établis sur


4. Pour vérifier le personnel appartenant au département, utilisez la méthode join

4.1 Il n'y a pas de table d'association Index


4.2 Index unique Idx_dept


4.3 Index unique Idx_user

4.4 Index combiné Idx_dept_user


4.5 Indice combiné Idx_user_dept


4.6 Tout est établi

Conclusion

Grâce aux résultats des tests réels ci-dessus, les conclusions suivantes peuvent être tirées : Pour cette table d'association, il est optimal d'établir des index à colonne unique idx_user et idx_dept respectivement pour user_uuid et dept_uuid.

L'index idx_user convient pour interroger le service de la personne via l'ID personnel ; l'index idx_dept convient pour interroger le personnel du département via le département.

Recommandations associées :

Analyser l'utilisation combinée des fonctions d'agrégation et joindre des tables_MySQL

mysql implémente les mises à jour d'association entre deux tables_MySQL ,

Introduction détaillée au partitionnement de table dans MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn