图文详解MySQL中两表关联的连接表如何创建索引

发布时间 - 2026-01-11 01:09:28    点击率:

本文介绍了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)

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

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

测试验证

一.人员查所属部门用and方式

1.1 关联表无索引


1.2 单索引 Idx_dept


1.3 单索引 Idx_user


1.4 组合索引 Idx_dept_user


1.5 组合索引 Idx_user_dept


1.6 所有都建立上


二 、人员查所属部门用join方式

2.1 关联表无索引

2.2 单索引 Idx_dept


2.3 单索引 Idx_user

2.4 组合索引 Idx_dept_user


2.5 组合索引 Idx_user_dept


2.6 所有都建立上


三 、部门查人员用and方式

3.1 关联表无索引

3.2 单索引 Idx_dept


3.3 单索引 Idx_user


3.4 组合索引 Idx_dept_user


3.5 组合索引 Idx_user_dept


3.6 所有都建立上


四 、部门查所属人员用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适用与通过部门查询出该部门下所属的人员。

其它

测试数据

Test.sql

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# mysql  # 多表关联  # 索引  # 表关联  # 创建联合索引  # 一文弄懂MySQL索引创建原则  # MySQL创建高性能索引的全步骤  # MySQL创建索引需要了解的  # MySQL 索引的优缺点以及创建索引的准则  # MySQL字符串索引更合理的创建规则讨论  # MySQL使用命令创建、删除、查询索引的介绍  # 怎样正确创建MySQL索引的方法详解  # MySql索引和索引创建策略  # 可以选择  # 四种  # 相关内容  # 在这个  # 来看看  # 这种情况  # 该如何  # 所示  # 这篇文章  # 谢谢大家  # 最优  # 如下图  # 测试数据  # 该部  # 有疑问  # idx_dept  # idx_user_dept  # idx_user  # user_uuid  # org_dept 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: iOS中将个别页面强制横屏其他页面竖屏  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  Laravel如何升级到最新版本?(升级指南和步骤)  如何在腾讯云免费申请建站?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  浅述节点的创建及常见功能的实现  高性能网站服务器部署指南:稳定运行与安全配置优化方案  Laravel API资源类怎么用_Laravel API Resource数据转换  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  php485函数参数是什么意思_php485各参数详细说明【介绍】  免费视频制作网站,更新又快又好的免费电影网站?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  打造顶配客厅影院,这份100寸电视推荐名单请查收  php结合redis实现高并发下的抢购、秒杀功能的实例  如何用好域名打造高点击率的自主建站?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Laravel模型事件有哪些_Laravel Model Event生命周期详解  如何快速搭建高效WAP手机网站?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  微信小程序 五星评分(包括半颗星评分)实例代码  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  再谈Python中的字符串与字符编码(推荐)  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel集合Collection怎么用_Laravel集合常用函数详解  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  无锡营销型网站制作公司,无锡网选车牌流程?  Python面向对象测试方法_mock解析【教程】  Laravel如何实现事件和监听器?(Event & Listener实战)  如何打造高效商业网站?建站目的决定转化率  Laravel怎么调用外部API_Laravel Http Client客户端使用  如何在云主机上快速搭建多站点网站?  微信推文制作网站有哪些,怎么做微信推文,急?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  香港网站服务器数量如何影响SEO优化效果?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  如何基于云服务器快速搭建个人网站?  黑客如何通过漏洞一步步攻陷网站服务器?  微信公众帐号开发教程之图文消息全攻略  如何用免费手机建站系统零基础打造专业网站?  ,南京靠谱的征婚网站?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel怎么上传文件_Laravel图片上传及存储配置  深圳网站制作平台,深圳市做网站好的公司有哪些?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道