mysql join 组合索引_详解MySQL两表关联的连接表创建单列索引还是组合索引最优...
概述
今天主要介绍一下MySQL中两表关联的连接表是如何创建索引的相关内容,下面来看看详细的介绍。
MySQL两表关联的连接表创建索引
创建数据库的索引,可以选择单列索引,也可以选择创建组合索引。
假设用户表(user)与部门表(dept)通过部门用户关联表(deptuser)连接起来,如下图所示:
表间关系
问题就是,在这个关联表中该如何建立索引呢?
针对该表,有如下四种选择:
针对于user_uuid建立单列索引idx_user
针对于user_dept建立单列索引idx_dept
建立组合索引idx_user_dept,即(user_uuid,dept_uuid)
建立组合索引idx_dept_user,即(dept_uuid,user_uuid)
对关联表的查询,有如下四种情况:
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 关联表无索引
1.2 单索引 Idx_dept
1.3 单索引 Idx_user
1.4 组合索引 Idx_dept_user
1.5 组合索引 Idx_user_dept
1.6 所有都建立上
02
人员查所属部门用join方式
2.1 关联表无索引
2.2 单索引 Idx_dept
2.3 单索引 Idx_user
2.4 组合索引 Idx_dept_user
2.5 组合索引 Idx_user_dept
2.6 所有都建立上
03
部门查人员用and方式
3.1 关联表无索引
3.2 单索引 Idx_dept
3.3 单索引 Idx_user
3.4 组合索引 Idx_dept_user
3.5 组合索引 Idx_user_dept
3.6 所有都建立上
04
部门查所属人员用join方式
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适用与通过部门查询出该部门下所属的人员。
mysql join 组合索引_详解MySQL两表关联的连接表创建单列索引还是组合索引最优...相关推荐
- mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)
详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC ...
- mysql通配符escape使用_详解MySQL like如何查询包含'%'的字段(ESCAPE用法)
在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...
- mysql通配符escape使用_详解MySQL like如何查询包含#39;%#39;的字段(ESCAPE用法)-MySQL教程-Web开发者网...
在SQl like语句中,比如 SELECT * FROM user WHERE username LIKE '%luchi%' SELECT * FROM user WHERE username L ...
- mysql mgr 三节点_详解MySQL 5.7 MGR单主确定主节点方法
我们行MGR年底要上线了,每天都要看官方文档学习,做测试,坚持每天写一个小知识点,有想一起学习的么~ MySQL 5.7 MGR单主确定主节点是哪个,我们可以通过成员ID来判断,然后结合read_on ...
- mysql 编辑数据库内容_详解mysql数据库增删改操作
插入数据 insert into 表名(列名1,列名2,列名3) values(值1,值2,值3); insert into user(user_id,name,age) values(1,'nice ...
- mysql 的dcl语句_详解MySQL第三篇—DCL语句
DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句.这些语句定义了数据库.表.字段.用户的访问权限和安全级别.主要的语句关键字包括 g ...
- mysql字段的区分度_详解MySQL索引长度和区分度之间的平衡,值得收藏
概述 前面我们讲了怎么去计算索引所占用的长度?那么换个方式想?索引又应该设置多少长度比较合理呢? 区分度与索引长度的权衡 首先索引长度和区分度是相互矛盾的, 索引长度太短,那么区分度就很低,吧索引长度 ...
- 操作 mysql 不生成日志_详解MySQL的日志
MySQL日志 MySQL的日志记录了MySQL的日常操作和错误信息,通过这些日志我们可以知道MySQL内部发生的事情,可以为MySQL的优化和管理提供必要的信息. MySQL的日志主要有:二进制日志 ...
- mysql操作json优点和缺点_详解Mysql中的JSON系列操作函数
前言 JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写.对机器来说易于解析和生成,并且会减少网络带宽的传输. JSON的格式非常简单:名称/ ...
最新文章
- [svc]gns3模拟器及探讨几个bgp问题
- 【深度学习】基于Pytorch的卷积神经网络概念解析和API妙用(一)
- Mac git 终端使用
- C语言实用算法系列之DOS传参“加减乘除计算器”
- java继承静态方法,是否在Java中继承了静态方法?
- UNIX高级环境编程 第3章 文件IO
- Scala安装教程(最详细教程)
- 程序员数学(23)–图形的旋转与中心对称
- 计算机d盘hlddz是啥,hlddzsdk.exe是什么进程?
- MySQL优化系列16-优化MySQL的锁
- 优雅的二维数组循环赋值
- 机器学习之密度聚类及代码示例
- 涉密计算机系统分级保护,计算机信息系统分级保护方案.pdf
- SQL使用模糊查询like ‘%ABC‘ 和 like ‘%ABC%‘ 的优化
- 大数据架构师需要具备哪些能力?
- 致初心,迎未来!TOM邮箱21周年,初心未改
- 福利贴:亲朋好友赶快来 凯福德金业让我赚大发啦!!!(推荐礼)
- 通过微软商店软件安装kali Linux子系统及图形界面
- S3C2440逻辑程序--从点灯开始
- Crack:GoJS 2.2.18 -2022-09-08 update
热门文章
- 多线程下C#如何保证线程安全?
- SQL语句 SELECT LIKE用法详解
- Mybatis 动态sql语句(if标签和where标签)
- 编译安装php的openssl组件时遇到 libssl not found解决办法
- Mysql翻转字符串reverse
- php mongodb _id,PHP库 查询Mongodb中的文档ID的方法
- java输入hello_详解JAVA输出Hello World
- aspx repeater 用法_ASP.NET - Repeater 控件
- python简单小游戏代码_一个简单的python小游戏---七彩同心圆
- llvm编译器实战教程第二版_LLVM编译器实战教程