MySQL索引结构B+Tree
Posted Java大数据笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL索引结构B+Tree相关的知识,希望对你有一定的参考价值。
数据结构图形化网站
https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
B+Tree
非叶子结点不存储data,只存储索引,可以放更多的索引
叶子结点不存储指针
顺序访问指针,提高区间访问的性能
MySQL查看数据库磁盘页大小sql(InnoDB引擎)
show GLOBAL status like 'innodb_page_size'
查询结果为16384(16k)
假设数据库索引字段为 bigInt类型一个bigint占用8个字节 旁边指针大概占用6个字节,每个叶子节点占用1k,一页能存储 大概1170(16k/14)条索引,当树高度为3时,能存储1170*1170*16约2千万条数据。
MyISAM索引实现
InnoDB索引实现
存储结构(主索引/辅助索引)
InnoDB的数据文件本身就是主索引文件。而MyISAM的主索引和数据是分开的。
InnoDB的辅助索引data域存储相应记录主键的值。而MyISAM的辅助索引和主索引没有多大区别
锁
MyISAM使用的是表锁
InnoDB使用行锁
事务
MyISAM没有事务支持和MVCC
InnoDB支持事务和MVCC
主键
InnoDB不允许没有主键存在,如果没有设定主键或非空唯一索引,就会自动生成一个6字节的主键,数据是主索引的一部分,附加索引保存的是主索引的值
外键
MyISAM不支持
InnoDB支持
以上是关于MySQL索引结构B+Tree的主要内容,如果未能解决你的问题,请参考以下文章