mysql 索引底层

【面试现场】为什么MySQL数据库要用B+树存储索引?

hash索引o(1)   B+树索引 o(logn)

为什么红黑树出现了,因为防止某些情况下二叉排序树退化为链表——诞生了二叉排序平衡树——树的性能取决于树的高度

为什么DB要用M路B树,为了再降低树的高度,减少db 磁盘io 次数,如果在内存中,红黑树效率更高

为什么M不能无限大,因为会退化成有序数组,无法一次载入内存,B树则可以一次加载一个节点

B+树在B树的基础上,(1)仅在叶子节点存放数据——B树高度更大;(2)同时叶子节点链表——避免跨层范围查找

为什么不用hash索引(1)select多条(2)索引一般是在磁盘上,数据量大的情况可能无法一次装入内存,B+树的设计可以允许数据分批加载,同时树的高度较低,磁盘io次数少,提高查找效率

还有一篇文章,

面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?

https://www.cnblogs.com/sujing/p/11110292.html

1、B-Tree因为非叶子结点也保存具体数据,所以在查找某个关键字的时候找到即可返回。而B+Tree所有的数据都在叶子结点,每次查找都得到叶子结点。所以在同样高度的B-Tree和B+Tree中,B-Tree查找某个关键字的效率更高
  2、由于B+Tree所有的数据都在叶子结点,并且结点之间有指针连接,在找大于某个关键字或者小于某个关键字的数据的时候,B+Tree只需要找到该关键字然后沿着链表遍历就可以了,而B-Tree还需要遍历该关键字结点的根结点去搜索
  3、由于B-Tree的每个结点(这里的结点可以理解为一个数据页)都存储主键+实际数据,而B+Tree非叶子结点只存储关键字信息,而每个页的大小有限是有限的,所以同一页能存储的B-Tree的数据会比B+Tree存储的更少。这样同样总量的数据,B-Tree的深度会更大,增大查询时的磁盘I/O次数,进而影响查询效率。

原文地址:https://www.cnblogs.com/silyvin/p/11408519.html

时间: 2024-10-09 18:22:34

mysql 索引底层的相关文章

深入理解Mysql索引底层数据结构与算法

深入理解Mysql索引底层数据结构与算法 ----->之前很多人还问我一些关于mysql索引的底层和使用,我就特意写一篇文章跟大家一起分享一下我对mysql索引的理解,大家有更深入的理解可以下面留言. 1.索引的定义 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构 大家使用索引有没有想过这个问题?为什么索引能够帮助mysql高效获取数据?我一一给大家道来!在给大家讲之前,先更大家分享一些计算机基础知识,有助于理解 我们都知道mysql数据是已文件的形式存储

MySQL索引底层实现原理

优秀博文: MySQL索引背后的数据结构及算法原理 B树.B-树.B+树.B*树[转],mysql索引 MySQL 和 B 树的那些事 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化.最基本的查询算法当然是顺序查找(linear search),这种复杂度为O

MySql索引底层原理

索引在生活中最常见的概念,无论是字典,还是图书馆藏书查找,根据索引能节约我们的时间.索引是一种为了高效获取数据的数据结构.要了解数据库索引的底层原理,我们就得先了解一种叫树的数据结构,而树中很经典的一种数据结构就是二叉树. 一.二叉树(Binary Search Trees) 二叉树是每个结点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用于实现二叉查找树和二叉堆. 遍历是对树的一种最基本的运算,所谓遍历二叉树,

MySQL索引底层实现

索引的本质 MySQL官方对于索引的定义为:索引是帮助MySQL高效获取数据的数据结构.即可以理解为:索引是数据结构. 我们知道,数据库查询是数据库最主要的功能之一,我们都希望查询数据的速度尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化.最基本的查询算法当然是顺序查找,当然这种时间复杂度为O(n)的算法在数据量很大时显然是糟糕的,于是有了二分查找.二叉树查找等.但是二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树,但是数据本身的组织结构不可能完全满足各种数据结构.所以,

【一步一步学习mysql】Mysql索引底层数据结构与算法

索引是什么 索引是帮助MySQL高效获取数据的排好序的数据结构. 索引存储在文件里 补充知识: 磁盘存取原理: * 寻道时间(速度慢,费时) * 旋转时间(速度较快) 磁盘IO读取效率: * 单次IO读取是N个页的大小,读取数据量大于N个页就需要分页读取. 索引的数据结构,推荐学习网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html 二叉树 有可能出现worst-case,如果输入序列已经排序,则时间复杂度为O(N)

重新学习MySQL数据库4:Mysql索引实现原理

重新学习Mysql数据库4:Mysql索引实现原理 MySQL索引类型 (https://www.cnblogs.com/luyucheng/p/6289714.html) 一.简介 MySQL目前主要有以下几种索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二.语句 CREATE TABLE table_name[col_name data type][unique|fulltext][index|key][index_name](col_name[lengt

掌握这13个MySQL索引知识点,让你面试通过率翻倍

数据库索引有关的知识,说实在的,真的是很复杂,本来想好好看看这方面的东西,然后写篇文章详细谈谈的,后来发现索引的知识太难太深,要谈得全面又详细真的很难,所以最后还是把自己学到的和想到的变成下面一个个的问题,希望能对大家帮助! 知识点 问题1:什么是数据库索引? 数据库索引是数据库系统中一个重要的概念,索引也叫做 key ,是一种用于提升数据库查询效率的数据结构,我们可以把索引理解成一本书的目录,通过目录我们可以快速找到对应章节的内容,同样的,通过数据库索引,我们可以快速找到数据表中对应的记录.

MySQL索引那些事

原文链接 大家有没有遇到过慢查询的情况,执行一条SQL需要几秒,甚至十几.几十秒的时间,这时候DBA就会建议你去把查询的 SQL 优化一下,怎么优化?你能想到的就是加索引吧? 为什么加索引就查的快了?这就要从索引的本质以及他的底层原理说起. 索引是什么 那索引到底是什么呢?你是不是还停留在大学学『数据库原理』时老师讲的“索引就像字典的目录”这样的概念?老师讲的没错,但没有深入去讲. 其实索引就是一种用于快速查找数据的数据结构,是帮助MySQL高效获取数据的排好序的数据结构. 索引的好处 举例说明

MySQL 8 新特性之降序索引底层实现

什么是降序索引 大家可能对索引比较熟悉,而对降序索引比较陌生,事实上降序索引是索引的子集. 我们通常使用下面的语句来创建一个索引: create index idx_t1_bcd on t1(b,c,d); 上面sql的意思是在t1表中,针对b,c,d三个字段创建一个联合索引. 但是大家不知道的是,上面这个sql实际上和下面的这个sql是等价的: create index idx_t1_bcd on t1(b asc,c asc,d asc); asc表示的是升序,使用这种语法创建出来的索引叫做