B+Tree

面试官:要不简单聊一下你对MySQL索引的理解?

你离开我真会死。 提交于 2019-11-26 21:49:14
MySQL索引?这玩意儿还能简单聊?明显是在挖坑,幸好老夫早有准备,切听我一一道来。 一、索引是什么? 索引是帮助MySQL高效获取数据的数据结构。 二、索能干什么? 索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引能够轻易将查询性能提高好几个数量级,总的来说就是可以明显的提高查询效率。 三、索引的分类? 1、从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。这里所描述的是索引存储时保存的形式, 2、从应用层次来分:普通索引,唯一索引,复合索引 3、根据中数据的物理顺序与键值的逻辑(索引)顺序关系:聚集索引,非聚集索引。 平时讲的索引类型一般是指在应用层次的划分。 就像手机分类:安卓手机,IOS手机 与 华为手机,苹果手机,OPPO手机一样。 普通索引 : 即一个索引只包含单个列,一个表可以有多个单列索引 唯一索引 : 索引列的值必须唯一,但允许有空值 复合索引 : 多列值组成一个索引,专门用于组合搜索,其效率大于索引合并 聚簇索引(聚集索引) : 并不是一种单独的索引类型,而是一种数据存储方式。具体细节取决于不同的实现,InnoDB的聚簇索引其实就是在同一个结构中保存了B-Tree索引(技术上来说是B+Tree)和数据行。 非聚簇索引 : 不是聚簇索引,就是非聚簇索引

【BATJ】面试必问MySQL索引实现原理

霸气de小男生 提交于 2019-11-26 12:07:42
BATJ面试题剖析 1、 为什么需要使用索引? 2、 数据结构 Hash 、平衡二叉树、 B 树、 B+ 树 区别? 3、 机械 硬盘、固态硬盘区别? 4、 M yisam与 I nnodb B+ 树的区别? 5、 MySQL 中的索引什么数据结构? 6、M ySQL 数据库优化方案? 1.为什么需要使用索引? MySQL官方对索引的定义为:索引(Index)是帮助 MySQL 高效 获取数据的数据结构。 也就是说:索引就像书的目录一样可以非常快速的定位到书的页码。 如果向 mysql 发出一条 sql 语句请求,查询的字段没有创建索引的话,可能会导致全表扫描,这样查询效率非常低 2.1 数据结构 Hash 算法 哈希表(Hash table,也叫散列表),是根据关 键码值(Key value) 而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做 散列函数 ,存放记录的数组叫做 散列表 。 优点 : 通过字段的值计算的hash值,定位数据非常快, 查找可以直接根据 key 访问。 缺点 : 因为底层数据结构是散列的,无法进行比较大小, 不能进行范围查找 index=Hash(key) 2.2数据结构 平衡二叉树算法 平衡二叉查找树,又称 AVL树。 它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它

MySQL(一)---存储引擎及索引

纵饮孤独 提交于 2019-11-25 22:52:14
存储引擎 为了达到不同的效果,mysql设计了不同的数据库引擎,我们最常用的就是innodb和myisam两个存储引擎,innodb设计目标是对数据的处理,而myisam追 求的是性能,两者产生的差异也是基于这点。在创建表的时候,innodb被用作默认引擎,可以在创建表的时候指定存储引擎,请自行google建表语句。 1. myisam只支持表级锁 innodb支持行级锁 2. myisam不支持事务 innodb支持事务 3. myisam不支持外键 innodb支持外键 4. myisam支持全文索引,innodb不支持 5. myisam本身存储了表的总数据行,innodb没有存储,查总行数myisam更快,如果加了查询条件两者就没有区别了 在业务处理中,基本上选择的都是innodb引擎,就是崩溃后,能够对数据进行修复 索引 索引有多种,B树系列索引、hash索引、全文索引等。Mysql一般使用B+树作为其索引结构 聚簇索引---非聚簇索引 (1)聚簇索引 ,聚簇:术语表示数据行和键值紧凑地存储在一起,也就是说,索引列数据与其他列的数据是存在一起的, 所以聚簇、所以索引、所以聚簇索引 ,所以聚簇索引不单单是一个索引类型,还是一个数据存储。在mysql中,聚簇索引使用B+tree实现,并被用于innodb存储引擎中。 在innodb存储引擎中,表的主键被默认为聚簇索引列

mysql的索引数据结构

天涯浪子 提交于 2019-11-25 21:24:46
二叉搜索树 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树 二叉平衡树 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树. 由于普通的二叉查找树会容易失去”平衡“,极端情况下,二叉查找树会退化成线性的链表,导致插入和查找的复杂度下降到 O(n) ,所以,这也是平衡二叉树设计的初衷。 二叉树,它的搜索时间复杂度为 O(log2N) ,所以它的搜索效率和树的深度有关,如果要提高查询速度,那么就要降低树的深度。 要降低树的深度,很自然的方法就是采用多叉树,再结合平衡二叉树的思想,我们可以构建一个平衡多叉树结构,然后就可以在上面构建平衡多路查找算法,提高大数据量下的搜索效率。 B-树 定义: 1. 有一个根节点,根节点只有一个记录和两个孩子或者根节点为空; 2. 每个节点记录中的key和指针相互间隔,指针指向孩子节点; 3. d是表示树的宽度,除叶子节点之外,其它每个节点有[d/2,d-1]条记录,并且些记录中的key都是从左到右按大小排列的,有[d/2+1,d]个孩子; 4. 在一个节点中,第n个子树中的所有key,小于这个节点中第n个key,大于第n-1个key