MySQL面试题
-
- >**面试官:**MySQL中,如何定位慢查询?
- >**面试官:**那这个SQL语句执行很慢, 如何分析呢?
- >**面试官:**了解过索引吗?(什么是索引)
- >**面试官:**索引的底层数据结构了解过嘛 ?
- >**面试官:**B树和B+树的区别是什么呢?
- >**面试官:**什么是聚簇索引什么是非聚簇索引 ?
- >**面试官:**知道什么是回表查询嘛 ?
- >**面试官:**知道什么叫覆盖索引嘛 ?
- >**面试官:**MYSQL超大分页怎么处理 ?
- >**面试官:**索引创建原则有哪些?
- >**面试官:**什么情况下索引会失效 ?
- >**面试官:**sql的优化的经验
- >**面试官:**创建表的时候,你们是如何优化的呢?
- >**面试官:**那在使用索引的时候,是如何优化呢?
- >**面试官:**你平时对sql语句做了哪些优化呢?
- >**面试官:**事务的特性是什么?可以详细说一下吗?
- >**面试官**:并发事务带来哪些问题?
- >**面试官**:怎么解决这些问题呢?MySQL的默认隔离级别是?
- >**面试官**:undo log和redo log的区别
- >**面试官**:事务中的隔离性是如何保证的呢?(你解释一下MVCC)
- >**面试官**:MySQL主从同步原理
- >**面试官**:你们项目用过MySQL的分库分表吗?
- >**面试官**:那你之前使用过水平分库吗?
>**面试官:**MySQL中,如何定位慢查询?
候选人:
嗯~,我们当时做压测的时候有的接口非常的慢,接口的响应时间超过了2秒以上,因为我们当时的系统部署了运维的监控系统Skywalking ,在展示的报表中可以看到是哪一个接口比较慢,并且可以分析这个接口哪部分比较慢,这里可以看到SQL的具体的执行时间,所以可以定位是哪个sql出了问题
如果,项目中没有这种运维的监控系统,其实在MySQL中也提供了慢日志查询的功能,可以在MySQL的系统配置文件中开启这个慢日志的功能,并且也可以设置SQL执行超过多少时间来记录到一个日志文件中,我记得上一个项目配置的是2秒,只要SQL执行的时间超过了2秒就会记录到日志文件中,我们就可以在日志文件找到执行比较慢的SQL了。
>**面试官:**那这个SQL语句执行很慢, 如何分析呢?
<**候选人:**如果一条sql执行很慢的话,我们通常会使用mysql自动的执行计划explain来去查看这条sql的执行情况,比如在这里面可以通过key和key_len检查是否命中了索引,如果本身已经添加了索引,也可以判断索引是否有失效的情况,第二个,可以通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描,第三个可以通过extra建议来判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复