mysql的聚簇索引和非聚簇索引

1.一个表中只能有一个索引吗?

可以按照需求来创建多个索引,但不要太多。

2.每一个索引是一棵B+树,还是所有的索引共用一棵B+树?

一个索引一棵B+树。

3.如果有多棵B+树的话,那么数据存储几份?

1份。

在innodb存储引擎中,数据在进行插入的时候需要跟某一个索引列绑定在一起,这个索引列如果有主键,那么使用主键,如果 主键,那么用唯一键,如果没有唯一键,那么使用6字节的rowid

innodb:既有聚簇索引也有非聚簇索引。

myisam:只有非聚簇索引。

主键索引和非主键索引的区别?

相同点:都是使用的B+Tree。

不同点:叶子节点存储的数据不同。主键索引的叶子节点存储的是一行完整的数据;而非主键索引的叶子节点存储的是主键值。叶子节点不包含记录的全部数据。

使用主键索引查询:select * from user where id = 1,主键索引的叶子节点存储的是一行完整的数据,所以只需要搜索主键索引的B+Tree就可以轻松找到全部数据。

使用非主键索引查询:select * from user where name = ‘Jack’;非主键索引的叶子节点存储的是主键值,所以MySQL会先查询到name列的索引的B+Tree,搜索得到对应的主键值,然后再去搜索该主键值查询主键索引的B+Tree才可以找到对应的数据。

可以看出来,非主键索引要比主键索引多使用一次B+Tree。多使用的这次B+Tree其实就是回表。

什么叫做回表?

比如说现在有一个表,这个表有几个属性,分别是id,name,age,gender; id是主键,而name是普通索引;

现在我们执行一个查询语句select * from table where name = “zhangsan”;这个查询语句的执行过程是什么呢?先根据name到nameB+树找到对应叶子节点的id值,然后再根据id到idB+树读取整行记录,这种查询方式叫做回表,效率比较低,不推荐使用。

如果有很多回表的话,有时候你虽然是查询的条件为name="zhangsan"的行,但是由于回表原因,导致你的查询效率极低,所以它有可能比你全表查询的效率还要低。

什么叫做索引覆盖?

假设你定义一个联合索引,CREATE INDEX idx_name_age ON user(name,age);查询名称为 liudehua 的年龄:mysql> select name, age from user where name = ‘liudehua’;上述语句中,查找的字段 name 和 age 都包含在联合索引 idx_name_age 的索引树中,这样的查询就是覆盖索引查询。索引覆盖的效率比较高,推荐使用。其实通俗一点讲就是,把我们要查询的所有的字段都放到一个联合索引里面,这样我们我们就需要查询一个索引B+树就行了,就不用再进行回表查询其他的索引B+树了,效率比较高,推荐使用。

什么叫做最左匹配?

就是最左优先,以最左边的为起点,任何连续的索引都能匹配上。同时遇到范围查询(>,<,between,like)就会停止匹配,也就是时说,如果你的联合索引左边的元素使用了范围查询,那么你建立的这个联合索引就是一个无效的索引,因为我们查询数据的时候不再会使用这个联合索引。

因为索引的底层是一颗B+树,联合索引的键值数量不是一个,而是多个。但是构建一棵二叉树只能根据一个值来构建,因此数据库依据联合索引最左的字段来建立B+树。

举个例子:假如创建一个(a,b)的联合索引,那么它的索引树是这样的如下图:

可以看到a的值是有顺序的,1,1,2,2,3,3,而b的值是没有顺序的1,2,1,4,1,2。所以b=2这种查询条件没有办法利用索引,因为联合索引首先是按a排序的,b是无序的。

同时我们还可以发现在a值相等的情况下,b值又是按顺序排列的,但是这种顺序是相对的。所以最左匹配原则遇上范围查询就会停止,剩下的字段都无法使用索引。例如a=1 and b=2 a,b字段都可以使用索引,因为在a值确定的情况下b是相对有序的,而a>1 and b=2,a字段可以匹配上索引但是b字段不可以,因为a的值是一个范围,在这个范围中b是无序的。所以这个时候你的联合索引还是用不上的。

因此我们在使用联合索引的时候,一定要使用最左匹配原则,筛选条件先用最左边的字段,并且如果有多个联合索引筛选,最左边的那个筛选字段不要使用范围查询,要不然的话我们的的联合索引就不会被使用到。

mysql的聚簇索引和非聚簇索引相关推荐

  1. mysql 聚簇索引和非聚簇索引_聚簇索引和非聚簇索引

    聚簇索引并不是一种单独的索引类型,而是一种数据存储方式.具体细节依赖于其实现方式. MySQL数据库中innodb存储引擎,B+树索引可以分为聚簇索引(也称聚集索引,clustered index)和 ...

  2. mysql 聚簇索引和非聚簇索引_MySQL学习之——索引

    转自:CSDN MySQL是目前绝大多数互联网公司使用的关系型数据库,它性能出色.资源丰富.成本低廉,是快速搭建互联网应用的首选关系型数据库.但是,俗话说,"好马配好鞍",仅仅会使 ...

  3. mysql 聚簇索引和非聚簇索引_图文并茂,说说MySQL索引

    点击上方 小伟后端笔记 ,选择 星标 公众号 重磅资讯.干货,第一时间送达 作者:小小木的博客来源:cnblogs.com/wyc1994666/p/10831039.html 序 开门见山,直接上图 ...

  4. 在mysql中建立聚簇索引_给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引...

    推荐阅读:吊打面试官!MySQL灵魂100问,你能答出多少? MySQL的InnoDB索引数据结构是B+树,主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储的是主键值,这是 ...

  5. Mysql聚簇索引和非聚簇索引原理(数据库)

    一.'页'和操作系统的关系 ①为什么要有内存管理? 我们知道,一个进程完成他的功能,需要访问磁盘加载数据到内存然后等待进入cpu运算,因为数据量大小远远大于内存大小.因此提出虚拟内存概念.虚拟内存就是 ...

  6. MySQL中Innodb的聚簇索引和非聚簇索引

    聚簇索引 数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(又叫二级索引)两种.Innodb的聚簇索引在同一个B-Tree中保存了索引列和具体的数据,在聚簇索引中,实际的数据保存在叶子页中, ...

  7. MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引

    一.索引类型 索引根据底层实现可分为B-Tree索引和哈希索引,大部分时候我们使用的都是B-Tree索引,因为它良好的性能和特性更适合于构建高并发系统. 根据索引的存储方式来划分,索引可以分为聚簇索引 ...

  8. MySQL聚簇索引和非聚簇索引的原理及使用

    从数据结构角度 1.B+树索引 2.hash索引 3.FULLTEXT索引(InnoDB引擎5.7以后支持) 4.R-Tree索引(用于对GIS数据类型创建SPATIAL索引) 问题:这些索引的区别跟 ...

  9. Mysql数据库索引的理解及聚簇索引和非聚簇索引的区别

    Mysql数据库索引的理解及聚簇索引和非聚簇索引的区别 概念 索引是帮助Mysql搞笑获取数据的数据结构 对Mysql数据库来讲,其核心就是存储引擎,而索引就是属于存储引擎级别的概念,不同的存储引擎对 ...

最新文章

  1. C++中Ansi、Unicode、UTF8字符串之间的转换和写入
  2. 一致性hash算法虚拟节点_一致性哈希算法——虚拟节点
  3. 问:PC机上的两个dns,是首用dns的查不到再查 备用的,是么?
  4. Minst 0-9特征迭代次数曲线表达式
  5. 小程序promise封装post请求_微信小程序 es6-promise.js封装请求与处理异步进程
  6. SSRS: How to Display Checkbox on Report
  7. C语言之加入头文件<stdbool.h>可以使用true和false
  8. python鼠标右键检测按钮_如何检测右键单击+左键单击
  9. IOS之Info.plist文件简介
  10. GuaiGuai ---- 1
  11. ATTCK实战系列二(CS域渗透)
  12. final、finalize、finally异同,以及final关键字如何使用
  13. 如何实现基于 RADIUS 协议的双因子认证 MFA?
  14. pyinstaller打包py遇到的问题
  15. 【洛谷 P6151 [集训队作业2019] 青春猪头少年不会梦到兔女郎学姐】【容斥原理+生成函数】
  16. UVA10110-灯光
  17. 开天辟地第一篇:我的blog我做主~
  18. Redis核心技术-高可靠-集群方案(客户端分片、代理分片、Redis Cluster)
  19. openssl在多平台和多语言之间进行RSA加解密注意事项
  20. Oracle查询最近一年数据以及两个日期间隔天数

热门文章

  1. 05_SQL注入_功能语句报错注入盲注
  2. Shiro使用和原理分析---2
  3. Python爬虫|Python爬虫入门:请求
  4. 阿里云虚拟主机,免费用
  5. Nginx教程(二) Nginx虚拟主机配置
  6. jacob java excel_使用 Jacob 操作Excel、Word文件
  7. windows删除大量文件的优秀方式
  8. [置顶]乔布斯的斯坦福演讲(双语)
  9. KubeCon + CloudNativeCon + Open Source Summit 2019大会上海开幕看点不断!
  10. 天猫精灵,还缺点啥?