MySQL的索引(学习)

175 阅读2分钟
    • 二叉树 === 自增成为链表(查询走索引等于全表扫描。索引查询没用)
    • 红黑树 === 二叉平衡树 (数据量大了,树高了,查询效率低)
    • Hash表
    • B+树
1、叶节点具有相同的深度,叶节点的指针为空
2、所有索引元素不重复
3、节点中的数据索引从左到右递增排列
4、树的高度可控

1、非叶子节点不储存数据,只储存索引(冗余),可以放很多索引
2、叶子节点包含所有索引字段
3、叶子节点用指针连接,提高区间访问性能
4、默认节点大小为 16KB (中间连接地址占用 8b)
5、递增排序 15->56->77
6、例如查询20数据;磁盘IO只需要查询3次就能拿到数据的磁盘地址
存储引擎区别
  • MyISAM
  • InnoDB
三个文件(表结构、数据、索引)

1、MyISAM索引文件和数据是分离的(非聚集===索引和数据是分开储存)
2、查询数据先定位索引的值,找到数据磁盘地址,然后在区数据文件读取数据
二个文件 (表结构、数据和索引)

InnoDB索引实现(聚集)
1、聚集索引(主键索引和所有数据都放在一起) --- 叶节点包含了完整的数据记录

2、普通索引叶子节点储存的主键id,也是非聚集也要多一次的回表操作

3、InnoDB表必须建主键,并且推荐使用整形的 自增主键。
  1)、如果没有主键索引,就开始找数据字段的唯一索引来维护B+数索引
  2)、没有主键索引和唯一索引。RowId建B+数来维护
  3)、整形作为主键,查询比大小快,节省空间