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

概述

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

645f54000d33229ec4bb7b590087f67d.png

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

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

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

cf4b318b22a88ed6dcd66835cba61cd9.png

表间关系

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

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

针对于user_uuid建立单列索引idx_user

针对于user_dept建立单列索引idx_dept

建立组合索引idx_user_dept,即(user_uuid,dept_uuid)

建立组合索引idx_dept_user,即(dept_uuid,user_uuid)

2940cb655724c8d5ebd7e52c5e18d889.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 关联表无索引

eff00112e6e9c4178eaaf37b3a686db7.png

1.2 单索引 Idx_dept

354ce09157c393bd7690e3df4765961d.png

1.3 单索引 Idx_user

04934c1cd2cc31fb337c8a134d1235a6.png

1.4 组合索引 Idx_dept_user

ba3bbec43749b318427fd8a918ff6069.png

1.5 组合索引 Idx_user_dept

6b63bb99a00f3554901146b28f65099b.png

1.6 所有都建立上

15adff7ce9abeb93a5a6e2dbddbe34b9.png

02

人员查所属部门用join方式

2.1 关联表无索引

8749877345ff08ac2aed120d8db48578.png

2.2 单索引 Idx_dept

8f88f755f76ec91abfff51c98a2b4886.png

2.3 单索引 Idx_user

1aef26943373091a69bd66c84e197fd1.png

2.4 组合索引 Idx_dept_user

26c06233e04557e8c8ee2e0556a493a9.png

2.5 组合索引 Idx_user_dept

6b08105374bc225d75f152aa3ed8233d.png

2.6 所有都建立上

9f9b99c4510873ab41b949102b3029e7.png

03

部门查人员用and方式

3.1 关联表无索引

7049d47af292fd897b77f88a55bf4018.png

3.2 单索引 Idx_dept

13a36d0a3a057b0eac192506ad2a9f8e.png

3.3 单索引 Idx_user

909f4a0f8b580048f0cb15bb3dd09096.png

3.4 组合索引 Idx_dept_user

5de9bc06922b4a3cabc3026faa5938d5.png

3.5 组合索引 Idx_user_dept

f8de9eaf045997a3a88c3774d1e6f2ca.png

3.6 所有都建立上

e7b1e9dd2842877ed6803362e9a8411b.png

04

部门查所属人员用join方式

4.1 关联表无索引

d004bb7ee6ad106e780490c938924b97.png

4.2 单索引 Idx_dept

006a82e6191720633765af4789e8f668.png

4.3 单索引 Idx_user

a87a4009089d5a9f5bff433d65f0065e.png

4.4 组合索引 Idx_dept_user

5266c42d49ae24c147e2b1cd479f96e2.png

4.5 组合索引 Idx_user_dept

457ec029e5164fe8a59886f447ee8c5c.png

4.6 所有都建立上

总结

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值