加载中...
加载中...
MySQL两表关联的连接表该如何创建索引?

MySQL两表关联的连接表该如何创建索引? 转载

MySQL两表关联的连接表该如何创建索引?

本文介绍了MySQL中两表关联的连接表是如何创建索引的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:

问题介绍

创建数据库的索引,可以选择单列索引,也可以选择创建组合索引。

遇到如下这种情况,用户表(user)与部门表(dept)通过部门用户关联表(deptuser)连接起来,如下图所示:

Alt  
表间关系

问题就是,在这个关联表中该如何建立索引呢?

针对该表,有如下四种选择:

  • 针对于user_uuid建立单列索引idx_user
    针对于user_dept建立单列索引idx_dept
    建立组合索引idx_user_dept,即(user_uuid,dept_uuid)
    建立组合索引idx_dept_user,即(dept_uuid,user_uuid)

对关联表的查询,有如下四种情况:

复制SQL一、人员查所属部门用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";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15


结论

通过上面的实际测试结果可以得出如下结论:针对于该关联表分别针对于user_uuid与dept_uuid建立单列索引idx_user,idx_dept最优。

其中索引idx_user适用与通过人员ID查询出该人员所在的部门;索引idx_dept适用与通过部门查询出该部门下所属的人员。

其它

测试数据

Test.sql


原文:https://blog.csdn.net/yzf913214/article/details/72232187



一、MySQL中日期和时间类型参考 MySQL数据类型(还有其他知识)参考  MySQL数据类型(还有其他知识)参考 SQL数据类型表示时间值的日期和时间类型为DATETIM
MySQL使用orderbyfield()自定义排序一、MySQLfield自定义排序函数的格式orderbyfield(value,str1,str2,str3,,,,,,strn)参数:value是字段,val
一、MySQL中 日期和时间类型参考 MySQL 数据类型(还有其他知识)参考 SQL 数据类型表示时间值的日期和时间类型为 DATETIME、DATE、TIMESTAMP、TIME和YEAR。
没有更多推荐了 [去首页]
image
文章
376
原创
293
转载
83
翻译
0
访问量
183399
喜欢
73
粉丝
5
码龄
7年
资源
3

文章目录

加载中...
0
0