索引数据结构
二叉树
跳跃表
红黑树
哈希
B树(B-Tree)
B+Tree(B-Tree变种)
MySQL 索引
非叶子节点不存储数据,只存储索引(冗余)
叶子节点包含所有字段,且叶子节点通过指针连接,提高区间查询性能
对于索引而言,降低树的高度有利于提高查询效率;相比于B树而言,因为B+树非叶子节点只包含索引信息,所以同样大小的存储块B+树能创建更高的度同时数据的结构层级更少
(B树叶子节点深度相同,无指针,所有节点索引元素不重复,全层节点数据从左向右递增)
查询 MySQL 页大小 16384 => 16KB (磁盘数据读取是按块的,而不是位,索引减少扫描表的次数减少I/O)
SHOW GLOBAL STATUS LIKE ‘INNODB_PAGE_SIZE’
存储引擎索引:如果未建索引,MySQL会选取数据唯一列作为索引列,如果不存在符合条件的列,则会创建一个隐藏列作为索引列,用于构建B+树
MyISAM(非聚集):索引叶子节点存储数据地址,查找索引拿到 MYD 数据文件地址,再根据地址去取数据(索引文件和数据文件分离)
InnoDB(聚集):索引叶子节点存储完整数据,推荐使用整形自增数据为主键;叶子节点值是从左向右递增的,利用范围取值;非主键索引结构叶子结点存储的