实习面试准备——mysql篇1

kai0fang0 / 2024-11-07 / 原文

不得不说,博客园这个文章格式搞得真变扭,感觉不如word好用。这次就解释下面8个问题。1.慢查询、2.索引相关、3.聚簇索引与非聚簇索引、4。回表查询与覆盖索引。(格式无所谓了,就这样写吧)

1.慢查询:

在项目中,我们一般会对其中业务分析其运行时间。对于时间长的业务,分析是否是慢sql导致。定位慢查询的话,运维有Skywalkin工具。我们一般是通过sql中自带的慢sql文件。查到对于的sql,并用explain去分析这条sql语句。(慢查询sql的判定时间可以在conf配置文件中自定义)。判断其中的key,key_len字段是否命中索引、type字段是否为全索引扫描或全表扫描、extra字段是否有回表查询。

2.索引

本质是一种优化数据查询的数据结构。其提高了数据的检索效率、降低了数据库的IO交互,同时还对数据提供了排序,降低排序成本。

mysql默认存储引擎Innodb库采用的B+树作为索引的数据结构,B+树的节点可以有多个子节点,可以降低树的高度。同时B+树的非叶子节点不存储数据,只存储键值和指针。在叶子节点存储数据,其中数据用双向链表链接方便范围查找和扫描。

对于B树,节点存储了键值、数据、指针。并且数据间没有形成双向链表

关于使用索引:

1.数据量要大,因为索引要额外维护空间

2.对于长文本字段,可以进行前缀索引

3.对区分度明显的字段设置索引

4.经常排序、分组的字段

5.经常用复合索引,覆盖sql返回值

6.控制索引数量,索引会减低增删改的效率

 

3.聚簇索引与非聚簇索引

聚簇索引:默认的索引,是用主键创建的索引,B+树叶子节点返回的是当前行的所有数据 (唯一)

非聚簇索引(二级索引):自定义的索引,B+树叶子节点返回的是当前表的主键

 

4.回表查询与覆盖索引

非聚簇索引无法返回sql查询的所有返回值。于是得到主键后再经行一次聚簇索引,得到当前行的数据

覆盖索引便是非聚簇索引直接命中了sql的返回值,不需要回表