MySQL八股知识点:从入门到删库跑路

Mysql

  • 1.B树和B+树区别是什么
    • B树
    • B+树
  • 2.高度为3的B+树可以存储多少数据
  • 3.Innodb是如何支持范围查找能走索引的
  • 4.回表查询&为什么要遵守最左前缀原则才能用到索引
  • 5.范围查找导致索引失效原理分析
  • 6.覆盖索引的底层原理
  • 7.索引扫描底层原理
  • 8.order by 为什么会导致索引失效?
  • 9. mysql中的数据类型转换有什么需要注意的吗?
  • 10.对字段进行操作导致索引失效原理
  • 11.Mysql中有哪些存储引擎
  • 12.MyIsam和Innodb的区别是什么?
  • 13.数据表设计时,字段你会如何选择?

1.B树和B+树区别是什么

B树

MySQL八股知识点:从入门到删库跑路_第1张图片
    B树:每个节点可以存储多个元素,元素存储是排序的,右边的节点都比左边的大。

B+树

MySQL八股知识点:从入门到删库跑路_第2张图片
    B+树:与B树相比,B+树最明显的区别是B+树的叶子结点有指针。里面的节点也可以存储不止一个元素。B+树的非叶子节点都冗余了一份在叶子节点上面。B+树就相当于B树的升级版。所以

  1. 一个节点里面有多个元素。
  2. 元素存储是按有序的,左节点小于右节点。
  3. 叶子节点之间有指针。
  4. 非叶子节点上面的元素都冗余了一份在叶子节点上面。换句话说,在B+树上面存储的元素都会在叶子节点上面,而且是指针相连、有序的。

2.高度为3的B+树可以存储多少数据

    高度为2的B+树:一页就是一个树的节点,叶子节点就是存储数据,根节点主要存储主键+指针,一页可以存储16k,假设一个表的每条记录大概也就1kb,一页可以存储16kb/1kb。两层的B+树可以存储1638*16=26208条数据。(16kb/10b=1638 int类型4个字节,一个指针6个字节,总共这一对加起来10b,16kb就是一页的数量,这一页存储的是目录。所以可以管理1638页。)
    高度为3的B+树:B+树只有叶子节点才存储元素值,所以前两层可以理解为存储的是目录。最顶层多一个节点,同样这个节点可以管理1638个目录,所以是1638*1638*16 == 42928074,4000多万条数据。


3.Innodb是如何支持范围查找能走索引的

    select * from t1 where a > 6是先执行a=6的操作,先找到a=6之后,再把a>6之后的所有数据全部返回就可以了。
MySQL八股知识点:从入门到删库跑路_第3张图片


4.回表查询&为什么要遵守最左前缀原则才能用到索引

    创建一个bcd的联合索引 create index idx_t1_bcd on t1(b,c,d),那么他也会生成一个B+树,那么这个b+树是怎么生成的呢? 我们主键索引所对应的B+树是按照主键锁对应的元素进行排序,然后生成B+树。那么bcd索引所对应的B+树也是一个道理,也就是把这几条数据按照bcd三个字段进行排序就可以了。但是叶子节点呢?叶子节点如果存放全部数据的话,每次增删改查数据都要对着两个B+树进行操作,相当的麻烦,所有在联合索引的叶子节点上,不存放其他元素的值,只存bcd三个字段的值和主键的索引。是因为我们如果借用bcd所有来查询,查到的元素只有bcd,还需要一个主键,进行回表操作,根据主键值在主键B+树查找完整的信息。
MySQL八股知识点:从入门到删库跑路_第4张图片

    最左前缀原则:where的条件,和你给的索引顺序无关(底层会给你优化排序),但必须包含最左侧的字段。比如这个查询就会使索引失效 select * from t1 where c = 1 and t = 1,没有用到a字段。这种情况就 相当于给的条件是 * 1 1,想要走bcd的索引,然后跟111322比较,看往左走还是往右走。
    这是没办法比较的,因为条件的最左边字段没给。但如果条件是b=1 and d=1是能走的,这就好比 1 * 1,这是可以比较的,数据一定在左边,因为左边的a比右边的a小


5.范围查找导致索引失效原理分析

    假如还是bcd联合索引,这次的查询条件是b>1,索引是会失效,走到是全表扫描。因为查找到b=1后,再去查找后面的数据,要的是完整的数据,所以得拿着存储的主键索引去回表查询,后面的数据过多是很麻烦的,所用的时间还不如全表扫描。


6.覆盖索引的底层原理

    


7.索引扫描底层原理


8.order by 为什么会导致索引失效?


9. mysql中的数据类型转换有什么需要注意的吗?


10.对字段进行操作导致索引失效原理


11.Mysql中有哪些存储引擎


12.MyIsam和Innodb的区别是什么?


13.数据表设计时,字段你会如何选择?


你可能感兴趣的:(MySQL,mysql,b树,数据库)