思考题: 为什么InnoDB存储引擎选择使用B+tree索引结构?
-
相对于二叉树,层级更少,搜索效率高;
-
对于B-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的高度,导致性能降低;
-
相对Hash索引,B+tree支持范围匹配及排序操作;
五阶BTree
B+Tree
B+树是B树的一种变形形式,B+树上的叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用。一棵m阶的B+树定义如下:
(1)每个结点至多有m个子女;
(2)除根结点外,每个结点至少有[m/2]个子女,根结点至少有两个子女;
(3)有k个子女的结点必有k个关键字。
B+树的查找与B树不同,当索引部分某个结点的关键字与所查的关键字相等时,并不停止查找,应继续沿着这个关键字左边的指针向下,一直查到该关键字所在的叶子结点为止。
Mysql优化B+Tree
索引
对与查询来说,如果不存在索引,则会进行全表扫描(效率低),Mysql索引的存储结构为优化后的B+树
索引优势
| 优势 | 劣势 |
|---|---|
| 提高数据检索效率,降低数据库的IO成本 | 索引列也会占用一定的空间 |
| 通过索引对数据进行排序,降低数据排序的成本,减低cpu的消耗 | 索引大大提高的查询效率,同时也降低了更新表的速度,如对表进行INSERT,UPDATA,DELETE |
Mysql支持的索引
| 索引结构 | 描述 |
|---|---|
| B+Tree索引 | 最常见的索引类型,大部分引擎都支持B+树索引 |
| Hash索引 | 底层数据结构是使用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询 |
| R-Tree(空间索引) | 空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类型,使用较少 |
| Full-text(全文索引) | 是一种通过建立倒排索引,快速匹配文档的形式,类似与ES |