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层,1170117032=4.38kw
4层,11701170117032=51.2亿一页16K(不考虑指针)
非叶子节点,存储主键(8),所以一页能存 16384/8 =2000条主键
叶子节点,存储数据,每行500byte,所以一页能存 16384/500 = 32行数据基于根节点高度为1,
所以只有1层时,只有根节点,存的都是数据,只有32行数据
2层,根节点存储的是主键+指针,200032=6.4w
3层,2000200032=1.28亿
4层,20002000200032=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