一  聚集索引的形成:

InnoDB要求表必须有主键(MyISAM可以没有),innodb会按照如下规则进行处理: 
  1,如果一个主键被定义了,那么这个主键就是作为聚集索引 
  2,如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引 
  3,如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚集索引,这个隐藏的主键是一个6个字节的列,改列的值会随着数据的插入自增。

二 聚集索引数据结构模(转):

上图就是带有主键的表(聚集索引)的结构图。图画的不是很好, 将就着看。其中树的所有结点(底部除外)的数据都是由主键字段中的数据构成,也就是通常我们指定主键的id字段。最下面部分是真正表中的数据。 假如我们执行一个SQL语句:

select * from table where id = 1256;

首先根据索引定位到1256这个值所在的叶结点,然后再通过叶结点取到id等于1256的数据行。 这里不讲解平衡树的运行细节, 但是从上图能看出,树一共有三层, 从根节点至叶节点只需要经过三次查找就能得到结果。如下图

三 非聚集索引和聚集索引的区别:

非聚集索引和聚集索引一样, 同样是采用平衡树作为索引的数据结构。索引树结构中各节点的值来自于表中的索引字段, 假如给user表的name字段加上索引 , 那么索引就是由name字段中的值构成,在数据改变时, DBMS需要一直维护索引结构的正确性。如果给表中多个字段加上索引 , 那么就会出现多个独立的索引结构,每个索引(非聚集索引)互相之间不存在关联。 如下图

每次给字段建一个新索引, 字段中的数据就会被复制一份出来, 用于生成索引。 因此, 给表添加索引,会增加表的体积, 占用磁盘存储空间。所以索引不是建立越多越好的。

非聚集索引和聚集索引的区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据,如下图

从上图可以看出非聚集索引都是要根据存储的主键值通过聚集索引,定位到数据,聚集索引(主键)是通往真实数据所在的唯一路径。

然而, 有一种例外可以不使用聚集索引就能查询出所需要的数据,那就是覆盖索引(联合索引)。当为字段建立索引以后, 字段中的内容会被同步到索引之中。这种方式就不用经过聚集索引拿到数据。

参考:https://zhuanlan.zhihu.com/p/23624390

简单理解聚集索引和非聚集索引相关推荐

  1. 关于SQL 数据库表中的聚集索引和非聚集索引等

    原文地址:http://www.cppblog.com/zuoyinbo/archive/2008/06/03/52075.html          1.概念          索引是在数据库表或者 ...

  2. 聚集索引和非聚集索引- -

    聚集索引和非聚集索引- - 此文章引自http://www.vckbase.com/document/viewdoc/?id=1307 1.什么是聚集索引和非聚集索引 SQL SERVER提供了两种索 ...

  3. 聚集索引与非聚集索引的总结

    一.索引简介 众所周知,索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及非聚集索引用的是B+树索引.这篇文章会总结SQL Se ...

  4. mysql创建非聚集索引_一文看懂聚集索引和非聚集索引的区别

    一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclu ...

  5. mysql创建非聚集索引_聚集索引和非聚集索引的区别

    作者:riemann riemann.blog.csdn.net/article/details/90324846 一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SE ...

  6. 聚集索引和非聚集索引(整理)

    聚集索引 一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序.  聚集索引确定表中数据的物理顺序.聚集索引类似于电话簿,后者按姓氏排列数据.由于聚集索引规定数据在表中的物理存储顺序,因此一个表 ...

  7. SQL Server的聚集索引和非聚集索引

    微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引)-- (一) ...

  8. [转]聚集索引和非聚集索引(sql server索引结构及其使用)

    聚集索引和非聚集索引(sql server索引结构及其使用) [来自]http://www.cnblogs.com/xinqqing83/archive/2006/10/31/545747.html ...

  9. 主键、聚集索引、非聚集索引区别

    下面是一个简单的比较表   主键 聚集索引 用途 强制表的实体完整性 对数据行的排序,方便查询用 一个表多少个 一个表最多一个主键 一个表最多一个聚集索引 是否允许多个字段来定义 一个主键可以多个字段 ...

  10. 聚集索引和非聚集索引的区别底层_数据库-索引相关

    一.什么是索引 在数据库中,索引的含义与日常意义上的"索引"一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象. 总而言之,索引是一个排序的列表,在 ...

最新文章

  1. python类修饰器_《Python有什么好学的》之修饰器
  2. 动态添加控件及将某XML动态加入到Activity显示
  3. JAM - get self detail information
  4. java基础入门答案谭晓芳,原理+实战讲解
  5. js动态创建样式style
  6. 算法高级(1)-概述
  7. android接口调用超时,RCA:收单设备调用云端接口频繁超时排查总结
  8. Ultra Librarian 生成Orcad封装教程
  9. 数据终端设备与无线通信模块之间串行通信链路复用协议(TS27.010)在嵌入式系统上的开发【转】...
  10. CAD工具栏不见了怎么显示出来/CAD面板不见了怎么显示出来
  11. 生产排程系统_ASPROVA:工序排程软件的全球隐形冠军
  12. 6. LaTeX 参考文献的排版与引用
  13. 总结一下自己的大学四年
  14. python孩子 哪里学_Python知识免费学!孩子提高逻辑思维,这样练就够了!
  15. Python中的三引号''' '''的用法
  16. 2017,不能再咸鱼了
  17. 覃小龙课堂:小白如何影视剪辑月入10W,24小时全天带你
  18. macOS Catalina 10.15.x.iso macOS Mojave 10.14.6 下载地址
  19. 很多人都有这个疑问:仰卧起坐真的能够减肚子么?
  20. 360 序列帧html生成工具,1.gif导出为序列帧

热门文章

  1. miui12会基于android10吗,全新MIUI12马上发布,基于Android11打造,小米10首批升级
  2. 网络云存储技术Windows server 2012 (项目十六 基于iSCSI传输的配置与管理)
  3. java 咖啡 典故,解读六大咖啡种类 常见咖啡种类及特点、背后典故、历史和定义...
  4. .rpt文件内容读取java_Java中读取File文件内容转为String类型
  5. python出现无法定位序数于动态链接库ssleay32.dll的问题
  6. EAS BOS序时簿界面排序
  7. 计算机键盘上fn键,键盘上的fn键有什么用?笔记本电脑键盘上的fn键作用大全
  8. 阿里云服务器价格表,阿里云服务器最新收费标准大全
  9. 微软快捷键截图_如何在Microsoft Office的屏幕提示中显示快捷键
  10. usb计算机采集卡,关于usb视频采集卡 hdmi设置你可能不知道