-聚簇索引:将数据存储与索引放到一起,索引结构的叶子节点保存了行数据

-非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置。

聚簇索引不一定是主键索引,而主键索引一定是聚簇索引。

可以理解成在聚簇索引上建立的索引,都是非聚簇索引(也称辅助索引)。因为一个表中只能有一个聚簇索引,其他都是非聚簇索引。

辅助索引的叶子节点存储的不再是行的物理位置,而是主键值,辅助索引总需要二次查找(如下图,首先在自己的树上找,找ID,虚线也是找ID;然后第二次就是拿着这个ID去找)。

这里抛出来一个问题,为什么不记得ID的地址,而要记录主键值ID,地址的话不是直接就能找到吗?

Reason:因为从增删改的角度,会导致叶子上地址发生变化(因为保存树平衡),而相对来说,主键值是不变的。

引擎上的区别:

InnoDB

使用的是聚簇索引,比如若使用“where id=14“的条件查找主键,则按照B+树的检索算法,即可查找到对应的叶节点,之后获得行数据。

若对Name列进行条件搜索,则需要两个步骤:①在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键。②用主键在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点获取整行数据。(重点在于通过其他键需要建立辅助索引

聚簇索引默认是主键,若表中无定义主键,InnoDB会选择一唯一且非空的索引代替。若无这样的索引,InnoDB会隐式定义一个主键(类似 oracle中的Rowld)作为聚簇索引。若已设了主键为聚簇索引又希望再单独设置聚簇索引,必须先删除原主键,然后添加,最后恢复设置主键即可。

MyISAM

便用的是非聚簇索引,不同非聚簇索引的B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已,主键索引B+树的节点存储了主键, 辅助键索引IB+树存储了辅助键。表数据存储在独立的地方,这两颗B+树的叶子节点都使用一个地址指向真正的表数据,对于表数据来说,这两个键没有任何差别。由于索引树是独立的,通过辅助键检索无需访问主键的索引树。

使用聚簇索引的优势 :

每次使用辅助索引检索都要经过两次B+树查找,看上去聚簇索引的效率明显要低于非聚簇索引,这不是多此一举吗?聚簇索引的优势在哪?

-1.由于行数据和聚簇索引的叶子节点存储在一起,同一页中会有多条行数据,访问同一数据页不同行记录时,已经把页加载到了Buffer中(缓存器),再次访问时,会在内存中完成访问,不必访问磁盘。这样主键和行数据是一起被载入内存的,找到叶子节点就可以立刻将行数据返回了,如果按照主键Id来组织数据,获得数据更快。(比如第一次主键ID访问访问到1,那么同一页的2,3,...也会被加载到缓存中,而非聚簇做不到。)

-2.辅助索引的叶子节点,存储主键值,而不是数据的存放地址。好处是当行数据放生变化时,索引树的节点也需要分裂变化(重排);或者是我们需要查找的数据,在上一次I0读写的缓存中没有,需一次新的Io操作时,可避免对辅助索引的维护工作,只需要维护聚簇索引树就好了。另一个好处是,因为辅助索引存放的是主键值,减少了辅助索引占用的存储 空间大小。

聚簇索引需要注意什么?

当使用主键为聚簇索引时,主键最好不要使用uuid,因为uuid的值太过离散,不适合排序且可能增加记录的uuid,会插入在索引树中间的位置,导致索引树调整复杂度变大,消耗更多的时间和资源。 ——建议使用int类型的自增方便排序并且默认会在索引树的末尾增加主键值,对索引树的结构影响最小。而且,主键值占用的存储空间越大,辅助索引中保存的主键值也会跟着变大,占用存储空间,也会影响到IO操作读取到的数据量。

为什么主键通常建议使用自增id

-聚簇索引的数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻地存放在磁盘上的。如果主键不是自增id,那么它会不断地调整数据的物理地址、分页,当然也有一些措施来减少这些操作,但无法彻底避免。但如果是自增的,只需一页一页地写,索引结构相对紧凑,磁盘碎片少,效率也高。

什么情况下无法利用索引呢?

1.查询语句中使用LIKE关键字 在查询语句中使用LIKE关铺字进行查询时,若字符串的第一个字符为“%”,索引不会被使用。如果“%”不是在第一个位置,索引就会被使用。

2.查询语句中使用多列索引,多列索引是在表的多个字段上创建一个常引,只有查询条件中使用了其中的第一个字段,索引才会被使用。

3.查询语句中使用OR关键字,查询语句只有OR关键字时,如果OR前后的两个条件的列是索引,那么查询中将使用索引。如果OR前后有一个条件的列不是索引,那么查询中将不使用索引。

本篇内容思想源于编程不良人课程的笔记。

MYSQL索引3:聚簇索引和非聚簇索引相关推荐

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

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

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

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

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

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

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

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

  5. MySQL的索引(聚簇索引和非聚簇索引)

    MySQL的索引: 数据库就像一本书本一样,内容就是数据库保存的数据,而索引则代表书的目录,索引的英文index就是目录的意思,我们可以通过目录迅速的找到你要想要找的内容在哪个位置,这比一页一页的去翻 ...

  6. MySQL聚簇索引和非聚簇索引(二级索引) B+树 数据页(索引页)

    对于Inndb来说,判断是否是聚簇索引,看B+树是否存放完整的数据就行. 对于MyISAM来说,全部都是非聚簇索引,即二级索引.因为它的所有和树是分开的. 注意:下面都是针对InnoDB 聚簇索引:所 ...

  7. 聚簇索引mysql语句_mysql索引之聚簇索引与非聚簇索引

    1 数据结构及算法基础 1.1 索引的本质 官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构 本质:索引是数据结构 查询是数据库的最主要功能之一.我们都希望查询速度能尽可能快,因此数 ...

  8. MySQL索引:聚簇索引和非聚簇索引的区别

    目录 1.聚簇索引和非聚簇索引的概念 2.两者详细介绍 2.1 聚簇索引 2.2 非聚簇索引 3. 两者的区别 3.1 数据存储方式 3.2 二级索引查询 1.聚簇索引和非聚簇索引的概念 数据库表的索 ...

  9. mysql 聚簇_mysql索引总结(3)-MySQL聚簇索引和非聚簇索引

    非聚簇索引 索引节点的叶子页面就好比一片叶子.叶子头便是索引键值. 先创建一张表: CREATE TABLE `user` ( `id`INT NOT NULL, `name`VARCHAR NOT ...

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

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

最新文章

  1. CLR探索系列:Windbg+SOS动态调试分析托管代码
  2. 一份超详细的 Java 问题排查工具单
  3. php不用密码登录,使用散列密码登录PHP
  4. java zmq zmsg,zmq 识别多个客户端
  5. 中石油训练赛 - Switches(高斯消元求逆矩阵+逆矩阵求线性方程组)
  6. java金字塔等边三角形_java99乘法表的小练习 正三角 倒三角 正金字塔 倒金字塔...
  7. 软件开发有哪些规范和标准_高品质、标准化——四维图新自动驾驶地图通过ASPICE CL2认证...
  8. JSP基础(一)JSP介绍,文件结构及执行过程
  9. 如何用PS快速去除图片上的文字
  10. openmp crunching
  11. 微信小程序错误码:“errcode“:40163和微信小程序-pad block corrupted 问题
  12. jvm核心技术梳理(持续更新)
  13. Odoo Excel报表的设计及实现
  14. 读取raw格式数据,OpenCV显示
  15. 微信小程序标签页组件
  16. I/O 的五分钟法则
  17. 为什么计算方差有时候除n,有时候除n-1
  18. 升级了WIN10后C盘占用满了怎么办?
  19. pytorch转onnx踩坑日记
  20. 商家后台-商品录入【商品介绍】、富文本编辑器

热门文章

  1. 电脑ndows无法启动,电脑无法启动windows帮助和支持为什么?
  2. 新站如何解决收录问题
  3. 绕过apple id的那些事
  4. 如何开启和关闭 win10卓越模式?
  5. 扩增子分析流程 —— 数据处理(vsearch)
  6. 很多人生哲理好句子分享
  7. windows系统C盘扩容详解
  8. 视频转GIF动图MATLAB源码
  9. 【day4】【洛谷算法题】-P5708三角形面积-刷题反思集[入门1顺序结构]
  10. 2022.02.19四座楼苹果园