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存储引擎的索引
三、区别与优缺点
区别:
聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个
聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续
聚集索引:物理存储按照索引排序;聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序。
非聚集索引:物理存储不按照索引排序;非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。
索引是通过二叉树的数据结构来描述的,我们可以这么理解聚簇索引:索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。
优势与缺点:
聚集索引插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快