美文网首页
Mysql Innodb的索引结构:B+ Tree 聚簇

Mysql Innodb的索引结构:B+ Tree 聚簇

作者: entro | 来源:发表于2019-04-19 20:16 被阅读0次

索引

索引(Index)是帮助MySQL高效获取数据的数据结构。
MongoDb索引使用BTree,而Mysql的MyISAM和Innodb使用B+Tree,为什么?

mySQL 使用B+Tree

B+Tree是一种适应文件系统而产生的一种BTree的变形树,其数据全部存储在叶子节点,而非叶子节点只存储占用空间很小的索引。
这样在以页为单位的索引中可以存放更多的节点,减少了磁盘IO,提高了效率。

MySQL的MyISAM存储引擎使用B+Tree的非聚集索引,B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。
而InnoDB存储引擎使用B+Tree的聚集索引,InnoDB的主键是聚簇索引

聚簇索引 (聚集索引)

一些地方区分聚簇索引和聚集索引,这里笔者倾向于两者是同一个意义,英文都是:clustered index。

聚簇索引就是物理地址连续存放的索引。在读取区间的时候查找速度非常快,相应的更新速度会受到影响。

InnoDB存储引擎的主键是聚簇索引。而MyISAM的主键仅仅只是一个叫做PRIMARY的唯一、非空的索引。

当表有聚簇索引时,它的数据行实际上存放在索引的叶子页(leaf page)中。因为无法同时把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引。

  • MyISAM可以没有主键,InnoDB必须有主键,不设置会InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引,如果还是没有则会生成隐藏的主键。

  • 术语“聚簇”表示数据行和相邻的键值紧凑地存储在一起

二级索引(辅助索引/非聚簇索引)

二级索引存储的是记录的主键,而不是数据存储的地址。唯一索引、普通索引、前缀索引等都是二级索引。

稠密索引

索引项对主表中的所有条目建立索引。聚簇索引是密集索引。
叶子节点保存的不只是键值,还保存了位于同一行记录里的其他列的信息,由于密集索引决定了表的物理排列顺序,一个表只有一个物理排列顺序,所以一个表只能创建一个密集索引

稀疏索引

索引项只对主表中的部分记录(即不会给每条记录)建立索引。 InnoDB的非主键(即非聚簇)及MyISAM都是稀疏索引。
稀疏索引所占空间小,并且插入和删除时所需维护的开销也小。但可能一次定位不到。

其他 Hash索引、全文索引

  1. MySQL的Memory存储引擎使用Hash索引
    hash 索引不能比较范围,不能排序,不能实现前缀索引
    适合小数据量(大了会发生hash碰撞)内存中使用。Btree比较适合磁盘。

  2. 全文索引(myISAM的char、varchar和text的字段上),v5.6.24后的InnoDb
    MySQL的全文索引适合英文文本,对中文支持不是很好,如有需要用ES类的全文检索工具。

  3. 前缀索引,索引的时候选择前面几个字符作为索引即可。

相关文章

  • Mysql Innodb的索引结构:B+ Tree 聚簇

    索引 索引(Index)是帮助MySQL高效获取数据的数据结构。MongoDb索引使用BTree,而Mysql的M...

  • 数据库(mysql)知识

    聚簇索引,覆盖索引 常见优化方式 B+树存储的结构 最左原则 存储引擎InnoDb和MyIsam区别 https:...

  • 聚簇索引非聚簇索引

    聚簇索引 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。MySQL数据库中innodb存储引擎,B+树索...

  • InnoDB 行锁的实现

    InnoDB 存储结构 InnoDB 是聚簇索引,也就是 B+树的叶节点既存储了主键索引也存储了数据行。而 Inn...

  • MySQL索引

    聚簇索引和非聚簇索引 只有Innodb有聚簇索引,MyISAM引擎没有聚簇索引。 主键一定是聚簇索引,MySQL的...

  • InnoDB-索引

    四、索引 mysql支持的常见索引:B+,全文、hash 1.B+树索引 B+树索引可以分为聚簇索引和非聚簇索引。...

  • Mysql的索引实践

    上次聊到Mysql的索引,特别是InnoDB索引,InnoDB所以为聚簇索引,所谓聚簇索引是说数据是存在索引中的,...

  • 2019-03-18

    mysql innodb索引原理 聚簇索引 聚集索引就是按照每张表的主键顺序构造一颗B+树。 查询优化器倾向于采用...

  • [数据库之十二] 数据库索引之覆盖索引

    1、MySQL 中的聚簇索引   对于 MySQL InnoDB 引擎来说,表必须要有聚簇索引(也叫聚集索引),设...

  • 索引

    mysql中的索引 MySQL中普遍使用B+Tree做索引,但在实现上又根据聚簇索引和非聚簇索引而不同。 聚簇索引...

网友评论

      本文标题:Mysql Innodb的索引结构:B+ Tree 聚簇

      本文链接:https://www.haomeiwen.com/subject/euocgqtx.html