mysql数据库索引面试准备

1.主键索引数据结构:Hash和B+树;

hash参考java中的HashMap没啥好说的,主要讲讲B+树(B+树建议先看看二叉树,红黑二叉树,B树)

   红黑树:红黑树的特性保证了树的平衡性;

   B树:是指每个树节点可以存储不止一条数据,比如一次磁盘寻道IO可以读取16KB数据时,一个节点理论上可以存储16KB的数据,一条数据为16B时,一个节点可以存储1024条数据,这样就限制了B树的高。每层树可以有1000条数据时,三层树就可以保存10亿条数据。(树的查询,每次可以查询一层数据,所以树的高度越低,查询越快.)

   B+树:改动点在于,非叶子节点不保存具体数据 只保存主键值,所有的数据都保存在叶子节点。这样的话在查询范围数据时,就不用每次都用根节点去查询了,节省了IO次数。

2.非主键索引:与主键索引不同点在于,所有的叶子节点存储具体数据的地方存储的是主键索引的值,所以通过非主键索引查询数据时,最终还是依靠非主键索引找到主键索引,然后找到对应数据。这样是用IO(时间)换空间(所有数据只存一份)。

3.InnoDb(聚集索引):是因为主键索引字段与具体的数据存储在一起(都在叶子节点 磁盘上)。(InnoDb支持事务,MyISAM不支持)

4.MyISAM(非聚集索引):是因为主键索引的叶子节点上存储的是具体数据的磁盘地址,而非具体数据。

5.联合索引:最左匹配,顺序会优化。

 

面试题一:为什么优先使用自增索引:

               1.整型数据占用字节大小比字符串小,一个节点能存储的主键字段个数多,度比较大,树高比较小;

               2.自增主键插入是有序的,字符串主键UUID是无序的,有序的插入能减少B+树索引重建时的分裂和数据移动。

面试题二:为什么非主键索引的叶子节点存储的是主键值,而非索引:

              1.IO(时间)换空间(所有数据只存一份)。

 

暂时先到这,下次继续~~

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值