mysql索引

mysl索引分类
  • B+树索引、Hash索引、全文索引是mysql数据库中的三类索引,今天着重学习最常用到的innodb存储引擎中的b+树索引。

基础知识,首先你需要了解二叉查找树,平衡二叉树和B树这三种数据结构。

  • 二叉查找树
    特点:任何节点的左子节点的键值都小于当前节点,右子节点的键值都大于当前节点。

  • 平衡二叉树
    在二叉查找树的基础上保持树的平衡,特点每个节点的左右子树的高度差不能超过1,当我们插入或者删除数据后,它可以通过左旋右旋来保持树的平衡。

  • B树
    前提:我们从磁盘读取数据都是按照磁盘块来读取的,不是一条一条的读,而平衡二叉树每个节点都只存储一个键值和数据,如果我们有大量的数据,平衡二叉树的节点会很多,高度就会很高,每个节点的读取都是一次磁盘IO,效率极低。
    B树即(Balance Tree)平衡树的意思,B树的每个节点可以更多的键值和数据,并且每个节点可以拥有多个子节点。(子节点的个数成为阶)这样树高会很低,查找数据磁盘IO次数会很少,效率很高。

B+树

  • 概念:没有子节点的节点叫做叶子节点,其他的叫做非叶子节点。
  • 特点1:B+树的非叶子节点上是不存储数据的,仅存储键值,而B树节点中不仅存储键值,也会存储数据。
  • 特点2: 页是数据库读取数据的基本单位,innodb中页的大小是固定的默认为16KB,如果非叶子节点不存储数据,就会存储更多的键值,相应的树的阶数(节点的子节点个数)就会更大,树就会更矮胖,这样查找数据的磁盘IO次数会更少。一般根节点是常驻内存的。
  • 特点3: B+树索引的所有数据都存储在叶子节点,而数据是按顺序排列的,所以使得范围查找、排序查找、分组以及去重变的异常简单。而B树因为数据分散在各个节点,要实现这一点很难。
聚簇索引/非聚簇索引
  • 聚簇索引:以主键作为B+树索引的键值而构建的B+树索引,我们称之为聚簇索引。
  • 非聚簇索引:以主键以外的列值作为B+树索引的键值而构建的B+树索引,我们称之为非聚簇索引。
    区别:聚簇索引中叶子节点存储了表中的所有数据,非聚簇索引中叶子节点不存储表数据,而是存储该列对应的主键值,要查找数据还需要根据主键再去聚簇索引中进行查找,这个过程称为回表。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章