Mysql两道思考题

1、假定MySQL设定的页长度是16K,表主键是bigint,每行数据是500字节,根节点高度为1,以下说法正确的是()
A. 如果需要存 2W 条数据,则聚合索引树高至少为 2;
B. 如果需要存 200W 条数据,则聚合索引树高至少为 3;
C. 如果需要存 2000W 条数据,则聚合索引树高至少为 4;
D. 如果需要存 2亿条数据,则聚合索引树高至少为 4;

1.答案:

一页16K
非叶子节点,存储主键+指针(8+6=14),所以一页能存 16384/14 =1170条主键
叶子节点,存储数据,每行500byte,所以一页能存 16384/500 = 32行数据

基于根节点高度为1,
所以只有1层时,只有根节点,存的都是数据,只有32行数据
2层,根节点存储的是主键+指针,117032=3.7w
3层,1170
117032=4.38kw
4层,1170
1170117032=51.2亿

一页16K(不考虑指针)
非叶子节点,存储主键(8),所以一页能存 16384/8 =2000条主键
叶子节点,存储数据,每行500byte,所以一页能存 16384/500 = 32行数据

基于根节点高度为1,
所以只有1层时,只有根节点,存的都是数据,只有32行数据
2层,根节点存储的是主键+指针,200032=6.4w
3层,2000
200032=1.28亿
4层,2000
2000200032=2560亿

所以不管考不考虑指针,都是选 ABD

2、有表A,主键id bigint,有字段a、b、c均为(varchar 500)有普通索引(a,b),执行 select a,b,c from A where a=‘1’ order by b limit 5; 请问以下哪些是正确的?
A. 直接扫描索引,得到临时结果集排序,并回表查询数据,再返回结果集。
B. 直接扫描索引,返回结果集。
C. 直接扫描索引后,回表查询数据,再返回结果集。

2.答案:

普通索引(a, b),where a=‘1’ order by b 命中 (a,b) 索引,且满足其本身的排序,所以直接查到满足条件的 a,b;但取不到 c,所以还需回表查一次数据,获取c,选 C

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值