java常见面试考点(四十九):聚集索引与非聚集索引

java常见面试考点

往期文章推荐:
  java常见面试考点(四十四):Comparable和Comparator接口
  java常见面试考点(四十五):阻塞队列
  java常见面试考点(四十六):生产者消费者
  java常见面试考点(四十七):synchronized底层原理
  java常见面试考点(四十八):synchronized与Lock的区别


【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权);

本博客的内容来自于:;

学习、合作与交流联系q384660495;

本博客的内容仅供学习与参考,并非营利;


一、B+树的三个优点

B+ 树的三个优点:
1)层级更低,IO 次数更少,因为非叶子节点中不存储数据,只存储索引,这就导致里面可以存储更多的索引!所以IO的次数更少,整个树变变的矮胖起来
2)每次都需要查询到叶子节点,查询性能稳定,而B树的查询性能是不稳定的,有时候可能在根节点查到,有时候可能在叶子结点查到
3)叶子节点形成有序链表,当我们进行即品范围查询的时候,直接在这个链表中寻找范围即可,范围查找更加方便

二、聚集索引与非聚集索引

MyISAM索引文件和数据文件是分离的(非聚集)myd文件存放数据,myi文件存放索引
InnoDB索引结构叶子节点存放的是完整的数据记录(聚集)ibd文件存放数据和索引

​ MyISAM引擎中,B+Tree叶节点的data域存放的是数据记录的地址。在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其 data域的值,然后以data域的值为地址读取相应的数据记录。所以MyISAM存储引擎中索引的实现特征是数据和索引分离,这被称为“非聚簇索引”

详情参考这篇文章:MyISAM存储引擎的索引和InnoDB存储引擎的索引

三、区别与优缺点

区别:

聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个
聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续
聚集索引:物理存储按照索引排序;聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序。
非聚集索引:物理存储不按照索引排序;非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。
索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

优势与缺点:

聚集索引插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天的爱人是绿色

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值