一、面试题目
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、undo log 是做什么的?
20、relay log 是做什么的?
21、redo log 是做什么的?
22、redo log 是怎么记录日志的?
23、redo log 和 binlog 的区别是什么?
24、请说一说 mvcc,有什么作用?
25、一条 SQL 语句查询一直慢会是什么原因?
26、一条 SQL 语句查询偶尔慢会是什么原因?
27、MySQL 主从之间是怎么同步数据的?
28、主从延迟要怎么解决?
29、删除表数据后表的大小却没有变动,这是为什么?
30、为什么 VarChar 建议不要超过255?
31、分布式事务怎么实现?
32、MySQL 中有哪些锁?
33、为什么不要使用长事务?
34、buffer pool 是做什么的?
35、请说说你的 SQL 调优思路
二、答案
1、说一说三大范式
第一范式【1NF】:要求每个属性不可再分,即单一职责。举例:由工号、姓名、性别、员工部门、员工电话号码组成的员工表,由于员工可能存在一个手机电话号码和一个办公电话号码,也就代表着员工电话号码还可以再分,所以需要将员工表的字段定义为工号、姓名、性别、员工部门、员工手机电话号码、员工办公电话号码,这样才符合第一范式。
第二范式【2NF】:要求符合第一范式,同时需要满足非主属性完全依赖于主键进行唯一标识。
第三范式【3NF】:在满足第二范式的基础上,非主键属性不能依赖其他非主键属性(消除传递依赖)
2、MyISAM 与 InnoDB 的区别是什么?
InnoDB 和 MyISAM 最大的区别是 InnoDB 支持事务,而 MyISAM 不支持事务。
主要区别如下:
InnoDB 支持崩溃后安全恢复,MyISAM 不支持崩溃后安全恢复;
InnoDB 支持行级锁,MyISAM 不支持行级锁,只支持到表锁;
InnoDB 支持外键,MyISAM 不支持外键;
MyISAM 支持 FULLTEXT 类型的全文索引,InnoDB 不支持 FULLTEXT 类型的全文索引,但是 InnoDB 可以使用 sphinx 插件支持全文索引,并且效果更好;
InnoDB 主键查询性能高于 MyISAM;
Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI;
InnoDB 必须有唯一索引(主键)」,如果没有指定的话, InnoDB 会自己生成一个隐藏列Row_id来充当默认主键,「MyISAM 可以没有。