【面试题库】150 道大厂常考的 MySQL 高频面试题,你会几道?

2022年12月26日 415点热度

150 道大厂常考的 MySQL 高频面试题,你会几道?

一、 Mysql 索引

1.1 Mysql 如何实现的索引机制?

  • InnoDB 索引与 MyISAM 索引实现的区别是什么?

  • 一个表中如果没有创建索引,那么还会创建 B+ 树吗?

1.2 说一下 B+ 树索引实现原理(数据结构)

  • 聚簇索引与非聚簇索引 B+ 树实现有什么区别?

  • 说一下 B+ 树中聚簇索引的查找(匹配)逻辑?

  • 说一下 B+ 树中非聚簇索引的查找(匹配)逻辑?

  • 平衡二叉树,红黑树,B 树和 B+ 树的区别是什么?都有哪些应用场景?

  • 一个 B+ 树中大概能存放多少条索引记录?

  • 使用 B+ 树存储的索引 CRUD 执行效率如何?

  • 什么是自适应哈希索引?

  • 什么是 2-3 树  2-3-4 树?

1.3 为什么官方建议使用自增长主键作为索引?(说一下自增主键和字符串类型主键的区别和影响)

  • 使用int自增主键后 最大 id 是 10,删除 id 10 和 9,再添加一条记录,最后添加的 id 是几?删除后重启 mysql 然后添加一条记录最后 id 是几?

1.4 索引的优缺点是什么?

  • 使用索引一定能提升效率吗?

  • 如果是大段文本内容,如何创建(优化)索引?

1.5 什么是聚簇索引?

  • 一个表中可以有多个(非)聚簇索引吗?

  • 聚簇索引与非聚集索引的特点是什么?

  • CRUD 时聚簇索引与非聚簇索引的区别是什么?

  • 非聚簇索引为什么不存数据地址值而存储主键?

1.6 什么是回表操作?

  • 什么是覆盖索引?

  • 非聚集(聚簇索引)索引一定回表查询吗?

  • 为什么要回表查询?直接存储数据不可以吗?

  • 如果把一个 InnoDB 表的主键删掉,是不是就没有主键,就没办法进行回表查询了?

1.7 什么是联合索引,组合索引,复合索引?

  • 复合索引创建时字段顺序不一样使用效果一样吗?

1.8 什么是唯一索引?

  • 唯一索引是否影响性能?

  • 什么时候使用唯一索引?

1.9 什么时候适合创建索引,什么时候不适合创建索引?

1.10 什么是索引下推?

1.11 有哪些情况会导致索引失效?

  • 为什么 LIKE 以 % 开头索引会失效?

1.12 一个表有多个索引的时候,能否手动选择使用哪个索引?

  • 如何查看一个表的索引?

  • 能否查看到索引选择的逻辑?是否使用过 optimizer_trace?

  • 多个索引优先级是如何匹配的?

1.13 使用 Order By 时能否通过索引排序?

  • 通过索引排序内部流程是什么?

  • 什么是双路排序和单路排序?

  • group by 分组和 order by 在索引使用上有什么区别?

1.14 如果表中有字段为 null,又被经常查询该不该给这个字段创建索引?

  • 有字段为 null 索引是否会失效?

二 、MySQL 内部技术架构

2.1 Mysql 内部支持缓存查询吗?

  • mysql 8 为何废弃掉查询缓存?

  • 替代方案是什么?

2.2 Mysql 内部有哪些核心模块组成,作用是什么?

  • MySQL 提示“不存在此列”是执行到哪个节点报出的?

2.3 一条 SQL 发送给 MySQL 后,内部是如何执行的?(说一下  MySQL 执行一条查询语句的内部执行过程?)

2.4 如果一张表创建了多个索引,在哪个阶段或模块进行的索引选择?

2.5 MySQL 支持哪些存储引擎?默认使用哪个?

2.6 MySQL 8.0 自带哪些存储引擎?分别是做什么的?

2.7 MySQL 存储引擎架构了解吗?

  • 能否单独为一张表设置存储引擎?

  • 阿里、京东等大厂都有自研的存储引擎,如何开发一套自己的?

2.8 MyISAM 和 InnoDB 的区别是什么?

  • 具体说一下如何做技术选型?

三 、MySQL 事务

3.1 什么是数据库事务?事务的特性是什么?

  • 什么是 ACID?

3.2 并发事务会有哪些问题?

  • 什么是脏读?

  • 什么是丢失修改?

  • 什么是不可重复读?

  • 什么是幻读?

3.3 不可重复读和幻读有什么区别?

3.4 MySQL 是如何避免事务并发问题的?

  • 什么是事务隔离级别?

  • 默认的级别是什么?

  • 如何选择事务隔离级别?

3.5 靠缓存可以提升高事务隔离级别的性能吗?

3.6 MySQL 事务隔离是如何实现的?

  • 什么是一致性非锁定读和锁定读?

  • 说一下 MVCC 内部细节?

3.7 MySQL 事务一致性,原子性是如何实现的?

3.8 MySQL 事务的持久性是如何实现的?

3.9 表级锁和行级锁有什么区别?

  • 什么是行级锁?MySQL 如何完成的?

  • 什么是共享锁(读锁)?

  • 什么是排它锁(写锁/独占锁)?

  • 什么是意向锁?

  • InnoDB 支持哪几种锁?

  • 当前读和快照读分别是什么?

3.10 什么是 XA 协议?

  • 什么是 mysql xa 事务?

  • xa 事务与普通事务区别是什么?

  • 什么是 2pc 3pc?

3.11 是否使用过 select for update?会产生哪些操作?

3.12 说一下 MySQL 死锁的原因和处理方法?

四 、Mysql 日志

4.1 MySQL 会产生几种日志?

  • binlog 作用是什么?

  • redolog 作用是什么?

  • undolog 作用是什么?

4.2 MySQL 日志是否实时写入磁盘?

  • bin log 刷盘机制是如何实现的?

  • redo log 刷盘机制是如何实现的?

  • undo log 刷盘机制是如何实现的?

4.3 MySQL 的 binlog 有有几种录入格式?分别有什么区别?

4.4 MySQL 集群同步时为什么使用 binlog?优缺点是什么?

五、 MySQL 开发

5.1 可以使用 MySQL 直接存储文件吗?

  • 什么时候存,什么时候不存?

  • 存储的时候有遇到过什么问题吗?

    • Emoji 乱码怎么办?

5.2 如何存储 ip 地址?

5.3 长文本如何存储?

  • 大段文本如何设计表结构?

  • 大段文本查找时如何建立索引?

  • 有没有在开发中使用过 TEXT,BLOB  数据类型?

5.4 日期,时间如何存取?

  • TIMESTAMP,DATETIME 的区别是什么?

  • 为什么不使用字符串存储日期?

  • 如果需要使用时间戳 timestamp和int该如何选择?

5.5 char 与 varchar 的区别?如何选择?

5.6 财务计算有没有出现过错乱?

  • decimal 与 float,double 的区别是什么?

  • 浮点类型如何选型?为什么?

5.7 预编译 SQL 是什么?

  • 预编译 SQL 有什么好处?

5.8 子查询与 join 哪个效率高?

  • 为什么子查询效率低?

  • join 查询可以无限叠加吗?

  • 如何优化过多 join 查询关联?MySQL 对 join 查询有什么限制吗?

  • join 查询算法了解吗?

5.9 是否有过 MySQL 调优经验?

  • 开发中使用过哪些调优工具?

  • 如何监控线上环境中执行比较慢的 SQL ?

  • 如何分析一条慢 SQL?

  • 如何查看当前 SQL 使用了哪个索引?

    • 索引如何进行分析和调优?

    • EXPLAIN 关键字中的重要指标有哪些?

    • 优化器为什么会在多个索引中选择一条?

5.10 MySQL数据库cpu飙升的话你会如何分析?

5.11 有没有进行过分库分表?

  • 什么是分库分表?

  • 什么时候进行分库分表?有没有配合es使用经验?

  • 说一下实现分库分表工具的实现思路?

  • 用过哪些分库分表工具?

  • 分库分表后可能会有哪些问题?

  • 说一下读写分离常见方案?

5.12 为什么要使用视图?什么是视图?

5.13 什么是存储过程?有没有使用过?

5.14 有没有使用过外键?有什么需要注意的地方?

5.15 用过 processlist 吗?

5.16 某个表有数千万数据,查询比较慢,如何优化?说一下思路。

5.17 如果有超大分页改怎么处理?

5.18 MySQL 服务器毫无规律的异常重启如何排查问题?

5.19 MySQL 线上修改表结构有哪些风险?

5.20 什么是 MySQL多实例部署?

150 道大厂常考的 MySQL 高频面试题

点击下载思维导图(访问密码: 3120)。

Baimi

世上只有两种编程语言:一种是总是被人骂的,一种是从来没人用的。