数据库索引高频面试题梳理

本文深入探讨数据库索引,解释了B+树为何优于B树,以及为什么在MySQL中选择B+树而非哈希索引。内容包括索引的作用、B+树的优势、整型自增主键的选择,以及聚簇与非聚簇索引的区别。此外,还对比了InnoDB和MyISAM存储引擎在索引上的差异,并分析了InnoDB辅助索引的优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

数据库索引的重点知识梳理~


1、索引是什么,有什么作用,有何优缺点?

索引是帮助Mysql高效获取数据的一种数据结构,通常用B树,B+树实现(Mysql不支持hash)

2、为什么用B+树而不用B树,B+树有什么优势?

(1)IO代价更低。B+树由于非叶子节点中不存放data,因此可以存放更多的索引值(单个大节点的容量固定,每个小单位size变小了),从而使得树的高度更低,磁盘IO次数更少。
(2)查询效率稳定。B+树由于所有data都放在叶子节点中,因此每次查询都要走完整的根节点到叶子节点的路径,所有查询的路径长度相同,查询效率更加稳定。
(3)更利于范围查询。B+树叶子节点之间有指针,注意是双向的指针,更利于范围查询。

案例分析:索引如何支撑千万级表的快速查找?(B+树)
在这里插入图片描述
Mysql底层用B+树存储索引,假设现在用3层B+树来存储(层数越少,磁盘I/O次数越少),我们来看一共能存多少行数据:
(1)Mysql规定一个页面大小为16KB(即图中一个大节点),假设现在存的数据字段是bigint型的,占8B,指针根据底层源码规定占6B,则一个大节点一共可以存放索引记录共16KB/(8+6)B=1170,则叶子节点的节点个数共有1170x1170个。
(2)假设叶子节点中一个索引+data占用1KB,则一个节点中可存放索引+data记录共16KB/1KB=16个。
(3)因此叶子节点层一共能存放索引+data记录数目为1170*1170*16=2190 2400
(4)因此3层B+树即可存放两千万以上的数据

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值