联合索引(各种索引)
聚集索引和非聚集索引
数据库中B+树索引可以分为聚集索引和非聚集索引(辅助索引)
聚集索引
每张表只有一个聚集索引,且是建立在主键上面的。
主键索引
在InnoDB存储引擎中,每张表都有个主键,如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键
首先判断表中是否存在非空的唯一索引,如果有,则该列即为主键
如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针。
联合索引
联合索引在表上的多个列进行索引。
1.联合索引
创建如下的表,并创建一个联合索引(a,b)
CREATE TABLE t(
a INT,
b INT,
PRIMARY KEY (a),
KEY idx_a_b (a,b)
)ENGINE=INNODB
联合索引的B+树如下。通过叶子节点可以逻辑上顺序的读出所有数据,(1,1),(1,2),(2,1),(2,4),(3,1),(3,2)
2.能够使用联合索引的情况
①全匹配
select * from t where a=xxx and b=xxx
②最左前缀匹配
对于单个的a列,也可以用到(a,b)联合索引
select * from t where a=xxx
③不能使用联合索引
叶子节点上b的值为1,2,1,4,1,2,显然不是排序的。
select * from t where b=xxx
同理,如果建立(a,b,c)索引,则下面的查询都能用到索引。
select * from t where a=xxx and b=xxx and c=xxx
select * from t where a=xxx and b=xxx
select * from t where a=xxx
select * from t where b=xxx and c=xxx
3.联合索引可对第二个列进行排序处理,减少一次filesort。
在联合索引(a,b)中,由于a相同的情况下b本来就是排序的,所以下面的查询能够用到(a,b)索引,且不需要额外再进行排序。
select * from t where a=xxx order by b
同理,如果建立(a,b,c)索引,下面的查询也能少一次fileSort。
select * from t where a=xxx and b=xxx order by c
select * from t where b=xxx order by c
select * from t where a=xxx order by b
喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
如果你对java技术很感兴趣也可以加入我的java学习群(374308445)来交流学习,里面都是同行,群验证【CSDN2】有资源共享。
联合索引(各种索引)相关推荐
- mysql联合索引查找过程_(MYSQL)回表查询原理,利用联合索引实现索引覆盖
一.什么是回表查询? 这先要从InnoDB的索引实现说起,InnoDB有两大类索引: 聚集索引(clustered index) 普通索引(secondary index) InnoDB聚集索引和普通 ...
- mysql索引篇之覆盖索引、联合索引、索引下推
覆盖索引 在之前<mysql索引初识>这篇文章中提到过,mysql的innodb引擎通过搜索树方式实现索引,索引类型分为主键索引和二级索引(非主键索引),主键索引树中,叶子结点保存着主键即 ...
- MySQL 性能分析 之 联合索引(复合索引)实践分析
MySQL 性能分析 之 联合索引(复合索引)实践分析 作为开发者,大家都知道,一个服务器.一个数据库的性能是项目的重中之重,后台架构.写法与数据库设计的好坏往往直接影响到整个项目的性能. 索引:是当 ...
- MySQL联合索引以及索引顺序优化
MySQL联合索引以及索引顺序优化 1. 环境准备 2. 测试验证 1. 环境准备 -- 查看版本 ,5.7.19-17-log select VERSION();-- 创建表结构 CREATE TA ...
- mysql联合索引和索引优化的理解
首先介绍联合索引的最左原则,即假设某张表test,有四个字段,id,a,b,c:id是主键,a和b是联合索引,建表和值如下: CREATE TABLE `test` (`id` int(11) NOT ...
- 复合索引 /多列索引 /联合索引 /组合索引?????
复合索引 /多列索引 /联合索引 /组合索引,一个意思,不同叫法. 含有多个列字段的索引 联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2. 例如: 创建数据库表CREATE ...
- 【推荐】mysql联合 索引(复合索引)的探讨
Mysql联合 索引(复合索引)的使用原则 命名规则:表名_字段名 需要加索引的字段,要在where条件中. 数据量少的字段不需要加索引.最窄的字段放在键的左边. 如果where条件中是OR关系,必须 ...
- Mysql的联合查询的索引小结
1.顺带提一下mysql的sql执行顺序: FORM: 对FROM的左边的表和右边的表计算笛卡尔积.产生虚表VT1 ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition& ...
- 联合两个索引查询,已解决: 还有个进行多条件搜索 and 与 or 的操作
1 联合两个索引查询,已解决: IndexSearcher[] searchers = new IndexSearcher[2]; searchers[0] = new IndexSearcher(m ...
- mysql索引创建规则、联合与一般索引、执行计划、索引选择,索引重建与下推
数据库索引怎么建,什么时候用到 索引优缺点:为主键外建where子句建立索引可以加速数据库查询,但是索引占用内存,同时update和insert的时候需要同步修改;索引的实现通常使用其变种B+树. 建 ...
最新文章
- Asp.Net大型项目实践(7)-用Unity实现AOP之事务处理+为啥要用AOP(附源码)
- 基于地图的工作流设计器,及基于地图的业务流程办理界面(三)
- InstallSield更新包快速入门文档----感谢原作者ㄣ齊¨彡仯乄的无私提供
- python D29 socketserver以及FTB
- 《Pytorch - 线性回归模型》
- PyQt5: This application failed to start because it could not find or load the Qt platform plugin
- 总结div里面水平垂直居中的实现方法
- 腾讯悄悄发布 Linux QQ,版本 2.0 Beta
- 破解 找回 lockdir 加密的文件
- linux 图片转视频教程,如何在Ubuntu上转换图像、音频和视频格式
- 第五章:软件详细设计
- 什么是悬赏任务APP源码?
- 【Uniapp 原生插件】芯烨云打印机插件
- Unity3d打包程序报错NotSupportedException: Encoding 437 data could not be found.
- 物联网的新危机!即将到期的SSL证书可能会影响……
- 如何制作一个自己的四足机器人
- windows在此计算机上找不到系统映象,笔记本电脑没有系统映像怎么办
- D:\anaconda3\envs\py2\python.exe: can‘t open file ‘create‘: [Errno 2] No such file or directory
- linux 的常用命令(持续更新.....)
- 计算机站课作文400字,关于电脑教室的作文400字