
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
数据库架构是大多数软件开发程序员都需要熟练掌握的一个编程技术,而本文我们就通过案例分析来简单了解一下,数据库索引数据结构基础知识分享。
索引的数据结构
索引是一种以空间换时间思想的具体实现,用于加速查询。
MySQL中由存储引擎层实现索引,InnoDB存储引擎中基于B+树实现,因此每个索引都是一棵B+树。
其中:
•每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,依赖行记录的PageHeader中next_record属性实现,其中保存下一条记录相对于本条记录的地址偏移量;
•数据页之间组成一个双向链表,依赖数据页的FileHeader中FIL_PAGE_PREV和FIL_PAGE_NEXT属性实现,其中保存本页的上一个和下一个页的页号。
多个页通过树进行组织,其中保存用户数据与目录项。目录项中保存页的用户记录中主键的小值与页号,从而保证下一个数据页中用户记录的主键值大于上一个页中用户记录的主键值。
其中:
•用户数据保存在叶子节点,目录项保存在非叶子节点,每个节点中可能保存多个页;
•上面的节点称为根节点,根节点的地址保存在内存的数据字典中;
•B+树的深度一般控制在3层以内,因此定位到单条记录不超过3次IO。
因此,页面和记录是排好序的,就可以通过二分法来快速定位查找。
有索引时,查询操作变成了什么样呢?
•从B+树的根节点出发,一层一层向下搜索目录项,由于上层节点保存的都是下层节点的小值,因此可以快速定位到数据可能所在的页;
•如果数据页在缓存池中,直接从内存中获取,否则从磁盘加载到内存中;
•数据页内部二分查找定位满足条件的记录行。
索引保存的数据
索引中保存的数据与索引的类型有关。
索引可以分为两种类型:
•聚簇索引,主键索引。叶子节点中保存主键值+对应的完整行记录,目录项中保存主键小值+页号。InnoDB属于索引组织表,每张表都有聚簇索引,因此表必须有主键,表中行的物理顺序与索引的逻辑顺序相同;
•非聚簇索引,二级索引,在非主键的其他列上建的索引。叶子节点中保存索引列的值+对应的主键值,目录项中保存索引列小值+对应的主键值+页号。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。