sqlserver两表查询关联_详解MySQL两表关联的连接表创建单列索引还是组合索引最优...

概述

今天主要介绍一下MySQL中两表关联的连接表是如何创建索引的相关内容,下面来看看详细的介绍。

239494091e7b7febe5dc13a55beb33c7.png

MySQL两表关联的连接表创建索引

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

假设用户表(user)与部门表(dept)通过部门用户关联表(deptuser)连接起来,如下图所示:

e974f88536107464e0ee1ee00a69d836.png

表间关系

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

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

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

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

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、人员查所属部门用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";

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、部门查所属人员用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";


01

人员查所属部门用and方式

1.1 关联表无索引

1b727b54a3bb76f50a0cd89eda2efab6.png

1.2 单索引 Idx_dept

2ea9b723bee8a46ff9a7a30f9428b2f3.png

1.3 单索引 Idx_user

516556be5f3dbe7fad0d0b07c5719df9.png

1.4 组合索引 Idx_dept_user

8a43c9f9df112664610a2247509ac461.png

1.5 组合索引 Idx_user_dept

5a42cd3d03b47993a3046c3a304e6293.png

1.6 所有都建立上

f6420d25b3600559198420bd28b87b75.png

02

人员查所属部门用join方式

2.1 关联表无索引

926b699515989ec152613aa1842bb800.png

2.2 单索引 Idx_dept

7bed1b8d445727451c94a74f1a508274.png

2.3 单索引 Idx_user

89a558e13ffacf4264a343cae41e8f6c.png

2.4 组合索引 Idx_dept_user

ee16fd87a02a3576971697452e1f7ad5.png

2.5 组合索引 Idx_user_dept

2ec1e99957293d0af828607895b515ee.png

2.6 所有都建立上

fde076dbd3f4db090f130d4861f6bea0.png

03

部门查人员用and方式

3.1 关联表无索引

47a88553dd1aba066642c71b33f69df2.png

3.2 单索引 Idx_dept

c13123b3a0841d9bdcf2dad9f081f2be.png

3.3 单索引 Idx_user

ec58817c06cebf405903b1c3fcf0a464.png

3.4 组合索引 Idx_dept_user

f42c490b880a92f77ba264f8359caec4.png

3.5 组合索引 Idx_user_dept

a6da0a13bb4afef33443780590fa7747.png

3.6 所有都建立上

29d54ad0f902681fd364949f892fb9ee.png

04

部门查所属人员用join方式

4.1 关联表无索引

4a302f834088f18d87545a8816870253.png

4.2 单索引 Idx_dept

89511b22fda9b0f75e2dd9bc098bbec6.png

4.3 单索引 Idx_user

bc01450d79983c7c1ab7199198e89b05.png

4.4 组合索引 Idx_dept_user

f86328482d5f306c0d3ee31992a87fcd.png

4.5 组合索引 Idx_user_dept

7a8ca89049f665d21222e7c3eb470e24.png

4.6 所有都建立上

37592ed2addd65b93c40f0e8fb3f41ad.png

总结

523a9a7a955237f59c813c6c1b11a056.png

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

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

后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

a91b7fb129ca60d228c1eb541f3900d0.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值