一文打尽 MySQL 面试: 经典 35 问

本文详细梳理了MySQL面试中常见的35个问题,涵盖三大范式、MyISAM与InnoDB的区别、自增ID主键、查询语句执行流程、事务处理、索引原理等方面,深入探讨了MySQL的性能优化与数据安全,是准备MySQL面试的宝贵参考资料。
摘要由CSDN通过智能技术生成

今天给大家总结了35 个 Mysql 常见的小问题

  • 1.说一说三大范式

  • 2.MyISAM 与 InnoDB 的区别是什么?

  • 3.为什么推荐使用自增 id 作为主键?

  • 4.一条查询语句是怎么执行的?

  • 5.使用 Innodb 的情况下,一条更新语句是怎么执行的?

  • 6.Innodb 事务为什么要两阶段提交?

  • 7.什么是索引?

  • 8.索引失效的场景有哪些?

  • 9.为什么采用 B+ 树,而不是 B-树

  • 10.WAl 是什么?有什么好处?

  • 11.什么是回表?

  • 12.什么是索引下推?

  • 13.什么是覆盖索引?

  • 14.什么是最左前缀原则?

  • 15.普通索引和唯一索引该怎么选择?

  • 16.什么是事务?其特性是什么?

  • 17.事务的隔离级别?

  • 18.binlog 是做什么的?

  • 19.undolog 是做什么的?

  • 20.relaylog 是做什么的?

  • 21.redolog 是做什么的?

  • 22.redolog 是怎么记录日志的?

  • 23.redolog 和 binlog 的区别是什么?

  • 24.说一说 mvcc 吧,有什么作用?

  • 25.一条 Sql 语句查询一直慢会是什么原因?

  • 26.一条 Sql 语句查询偶尔慢会是什么原因?

  • 27.Mysql 主从之间是怎么同步数据的?

  • 28.主从延迟要怎么解决?

  • 29.删除表数据后表的大小却没有变动,这是为什么?

  • 30.为什么 VarChar 建议不要超过255?

  • 31.分布式式事务怎么实现?

  • 32.Mysql 中有哪些锁?

  • 33.为什么不要使用长事务?

  • 34.buffer pool 是做什么的?

  • 35.说说你的 Sql 调优思路吧


1.说一说三大范式

  • 「第一范式」:数据库中的字段具有「原子性」,不可再分,并且是单一职责

  • 「第二范式」「建立在第一范式的基础上」,第二范式要求数据库表中的每个实例或行必须「可以被惟一地区分」。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键

  • 「第三范式」「建立在第一,第二范式的基础上」,确保每列都和主键列直接相关,而不是间接相关不存在其他表的非主键信息

但是在我们的日常开发当中,「并不是所有的表一定要满足三大范式」,有时候冗余几个字段可以少关联几张表,带来的查询效率的提升有可能是质变的

2.MyISAM 与 InnoDB 的区别是什么?

    1. 「InnoDB支持事务,MyISAM不支持」

    1. 「InnoDB 支持外键,而 MyISAM 不支持」

    1. 「InnoDB是聚集索引」,使用B+Tree作为索引结构,数据文件是和索引绑在一起的,必须要有主键。「MyISAM是非聚集索引」,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

    1. 「InnoDB 不保存表的具体行数」「MyISAM 用一个变量保存了整个表的行数」

  • 5.Innodb 有 「redolog」 日志文件,MyISAM 没有

  • 6.「Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI」

    • Innodb:frm是表定义文件,ibd是数据文件

    • Myisam:frm是表定义文件,myd是数据文件,myi是索引文件

    1. 「InnoDB 支持表、行锁,而 MyISAM 支持表级锁」

  • 8、「InnoDB 必须有唯一索引(主键)」,如果没有指定的话 InnoDB 会自己生成一个隐藏列Row_id来充当默认主键,「MyISAM 可以没有」

3.为什么推荐使用自增 id 作为主键?

  • 1.普通索引的 B+ 树上存放的是主键索引的值,如果该值较大,会「导致普通索引的存储空间较大」

  • 2.使用自增 id 做主键索引新插入数据只要放在该页的最尾端就可以,直接「按照顺序插入」,不用刻意维护

  • 3.页分裂容易维护,当插入数据的当前页快满时,会发生页分裂的现象,如果主键索引不为自增 id,那么数据就可能从页的中间插入,页的数据会频繁的变动,「导致页分裂维护成本较高」

4.一条查询语句是怎么执行的?

  • 1.通过连接器跟客户端「建立连接」

  • 2.通过查询「缓存查询」之前是否有查询过该 sql

    • 有则直接返回结果

    • 没有则执行第三步

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值