索引

96 阅读2分钟

思考题: 为什么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