Mysql面试整理

117 阅读3分钟

1. Mysql中,如何定位慢查询

部署运维监控系统Skywalking,在报表展示中可以看到哪个接口慢,并且能分析出接口中哪部分耗时较多,包括具体的SQL执行时间,这样就能定位到出现问题的SQL。

如果没有这种监控系统,MySQL本身也提供了慢查询日志功能。可以在mysql的系统配置文件中开启慢查询日志,并设置sql执行时间超过多少就记录到日志文件。比如我们之前项目设置的是2秒,超过2秒的sql就好记录在日志文件中,可以在那里找到执行慢的sql。

2. 那这个SQL语句执行很慢,如何分析呢?

如果一条SQL执行很慢,我们通常会使用MySQL的EXPLAIN命令来分析这条SQL的执行情况。通过key和key_len 可以检查是否命中了索引,如果已经添加了索引,也可以判断索引是否有效。通过type 字段可以查看SQL是否有优化空间,比如是否存在全索引扫描或全表扫描。通过extra建议可以判断是否出现回表情况,如果出现,可以尝试添加索引或修改返回字段来优化。

检查EXPLAIN输出的几个关键点:

  • type:表示访问类型,例如ALL(全表扫描),index(索引扫描),range(范围扫描),ref(非唯一索引扫描)等。尽量避免ALL类型的全表扫描。
  • possible_keyskeypossible_keys显示MySQL可以使用的索引,而key则显示实际使用的索引。如果keyNULL,说明没有使用索引。
  • rows:显示MySQL估计需要检查的行数。这个数字越小越好。
  • Extra:包含额外的信息,如Using filesortUsing temporary,这些通常意味着性能问题。
EXPLAIN SELECT * FROM your_table WHERE your_column = 'some_value';

3. 什么是索引

索引是一种帮助MySQL高效获取数据的数据结构,主要用来提高数据检索效率,降低数据库的I/O成本。同时,索引列可以对数据进行排序,降低数据排序的成本,也能减少CPU的消耗。

4. 索引的底层数据结构了解吗

MySQL的默认存储引擎InnoDB使用的是B+树作为索引l的存储结构。选择B+树的原因包括:节点可以有更多子节点,路径更短;磁盘读写代价更低,非叶子节点只存储键值和指针,叶子节点存储数据;B+树适合范围查询和扫描,因为叶子节点形成了一个双向链表。

5. 5.B树和B+树的区别是什么

B树和B+树的主要区别在于:

1.B树的非叶子节点和叶子节点都存放数据,而B+树的所有数据只出现在叶子节点,这使得B+树在查询时效率更稳定。

2。B+树在进行范围查询时效率更高,因为所有数据都在叶子节点,并且叶子节点之间形成了双向链表。

6. 什么是聚簇索引,什么是非聚簇索引

聚簇索引是指数据与索引放在一起,B+树的叶子节点保存了整行数据,通常只有一个聚簇索引,一般是由主键构成。

非聚簇索引则是数据与索引分开存储,B+树的叶子节点保存的是主键值,可以有多个非聚簇索引,通常我们自定义的索引都是非聚簇索引。

7. 什么是回表查询

回表查询是指通过二级索引找到对应的主键值,然后再通过主键值查询聚簇索引中对应的整行数据的过程。

8. 什么是覆盖索引

覆盖索引是指在SELECT查询中,返回的列全部能在索引中找到,避免了回表查询,提高了性能。使用覆盖索引可以减少对主键索引的查询次数,提高查询效率。