索引数据结构

一、索引数据结构

通过数据结构与算法可视化网站,插入一组相同的数据对比不同数据结构的区别。

测试网址

二叉树

插入一组数据【2、4、6、8、66、88、130】

缺点:偏移太严重

红黑树

插入一组数据【2、4、6、8、66、88、130】

缺点:层级太多

B-Tree

  • 叶节点具有相同的深度,叶节点的指针为空;
  • 所有索引元素不重复;
  • 节点中的数据索引从左到右递增排列;

插入一组数据【2、4、6、8、66、88、130】

B+Tree

  • 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引;
  • 叶子节点包含所有索引字段;
  • 叶子节点用指针连接,提高区间访问的性能;

插入一组数据【2、4、6、8、66、88、130】

HASH

  • 对索引的key进行一次hash计算就可以定位出数据存储的位置;
  • 很多时候Hash索引要比 B+树索引更高效;
  • 仅能满足"=","IN",不支持范围查询;
  • HASH冲突问题;

二、存储引擎存储数据结构对比

MYISAM存储引擎索引的存储结构

  • .frm:表结构文件
  • .MYD:表的数据文件
  • .MYI:索引文件

索引和数据分开存储
查询带有索引的数据,先定位索引元素,date存放着索引所在行的磁盘文件地址,根据磁盘文件地址去加载数据文件中的字段。

INNODB存储引擎

  • .frm:表结构文件
  • .ibd:表的索引和数据文件

表数据文件本身就是按B+Tree组织的一个索引结构文件
聚集索引-叶节点包含了完整的数据记录
为什么建议InnoDB表必须建主键,并且推荐使用整型的自增主键?
为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间)

主键索引存储数据:叶子节点存放着索引所在行其它所有列的数据。

二级索引:先定位主键,再根据主键查找数据

posted @   *一炁化三清*  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示