Skip to content

MySQL_常见面试题

面试题

  • 1、如何定位慢查询
  • 2、SQL 语句执行的很慢,如何分析
  • 3、索引概念以及索引底层数据结构
  • 4、聚簇索引和非聚簇索引、回表查询
  • 5、覆盖索引、超大分页优化
  • 6、索引创建的原则
  • 7、什么情况下索引会失效
  • 8、谈一谈你对 SQL 优化的经验
  • 9、事务的特性
  • 10、并发事务问题、隔离级别
  • 11、undo log 和 redo log 的区别
  • 12、解释一下 MVCC
  • 13、主从同步原理
  • 14、分库分表

主要面试题:

image.png

在 MySQL 中,如何定位慢查询?

优化

慢查询

在 MySQL 中,如何定位慢查询?

  • 聚合查询
  • 多表查询
  • 表数据量过大查询
  • 深度分页查询

表象:页面加载过慢、接口压测响应时间过长(超过 1s )

方案一、开源工具

image.png

方案二: MySQL 自带慢日志

image.png

总结:

image.png

(生产阶段一般不开启慢日志查询)

开源采用 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息

image.png

参数使用

  • possible_key
  • key
  • key_len
  • Extra

image.png

  • type

image.png

总结

image.png

索引

什么是索引

提高访问效率,索引是某种数据结构组成

索引(index)是帮助 MySQL 高效获取数据的数据结构 (有序) 。

在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

索引的底层结构

  • 目前索引采用的底层结构是 B+ 树

image.png

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

image.png

image.png

讲一下回表查询

回表查询:通过二级索引找到对应的主键值

image.png

知道什么是覆盖索引吗

对查询列有要求,一般是查询的字段和索引字段相同,不同走主键查询那步,直接从索引树上查询出了数据

image.png

你看一下这个例子,主键索引中查询条件是主键的话,直接查询所有数据是话算是覆盖索引,然后如果是二级索引,查询 主键+ 索引 是算覆盖索引查询(索引树上直接查询)

image.png

覆盖索引的基本介绍

image.png

超大分页

MySQL 超大分页怎么处理

image.png

提供一种解决思路:通过覆盖索引 + 子查询 形式进行优化 、

  • 先通过覆盖索引查询出对应的ID,然后通过关联查询,查询出分页数据

image.png

总结

image.png

索引创建原则

回答思路:

image.png

主要的一些原则:

image.png

索引创建原则有哪些?

    1. 数据量较大,且查询比较频繁的表 重要
  • 2).常作为查询条件、排序、分组的字段 重要
  • 3).字段内容区分度高
  • 4).内容较长,使用前缀索引
  • 5).尽量联合索引 重要
  • 6).要控制索引的数量 重要
  • 7).如果索引列不能存储NULL 值,请在创建表时使用NOT NULL 约束它
索引失效

如何判断索引是否失效:通过 执行计划 explain

image.png

索引失效的一些情况:

image.png

理解去记忆一下

image.png

SQL 优化

谈谈你对 SQL 优化的经验

image.png

  • 主从复制、读写分离

image.png

总结:

  • 1、表的设计优化,数据类型的选择
  • 2、索引优化,索引创建原则、
  • 3、sql语句优化,避免索引失效,避免使用select * ....
  • 4、主从复制、读写分离,不让数据的写入,影响读操作
  • 5、分库分表

其他问题

事务相关

事务的特性

事务:事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

ACID是什么?可以详细说一下吗?

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

讲述这种题目的适合最好结合一下实际案例来讲述一下,让面试官觉得你讲的和其他人有所不同

示例:

image.png


并发事务带来哪些问题?怎么解决这些问题呢?MySQL 的隔离级别是?

  • 并发事务问题:脏读、不可重复读、幻读
  • 隔离级别:读未提交、读已提交、可重复读、串行化

并发事务问题

image.png

怎么解决并发事务的问题?

image.png

注意:事务隔离级别越高,数据越安全,但是性能越低。

总结:

image.png

日志

undo log 和 redo log 的区别?

先引入一个概念:即缓存池和数据页,数据页是磁盘中实际存储的数据,但一般数据加载的时候会先从内存中到磁盘,这个内存的区域叫做缓冲池。

image.png

服务宕机的时候,数据如何保证不丢失,是由于日志的存在。

  • redo log:

image.png

  • undo log

image.png

总结:

image.png


后面还有几道,明天再看一下

  • 12、解释一下 MVCC
  • 13、主从同步原理
  • 14、分库分表