MySQL 23道经典面试吊打面试官

本文详细讨论了MySQL的面试热点,涵盖三大范式、MyISAM与InnoDB的区别、redolog和binlog、索引优化、事务及隔离级别、主从延迟等问题。讲解了如何避免索引失效、主从复制原理以及MVCC机制,最后提到了雪花算法生成唯一ID。
摘要由CSDN通过智能技术生成

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,redolog和binlog

(1)MySQL 分两层: Server (服务器) 层和引擎层。区别如下:

Server (服务器) 层:主要做的是 MySQL 功能层面的事情。 Server (服务器) 层也有自己的日志,称为 binlog(归档日志)

引擎层:负责存储相关的具体事宜。redo log 是 InnoDB 引擎特有的日志。

(2)redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。

(3)redo log 是循环写的,空间固定会用完;

(4)binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

4什么时候不走索引(sql优化)

  • like这种模糊查询的时候,%在前面不走索引,%在后面走索引

  • 索引列计算的时候不走索引 比如:select * from student where age + 8 = 18

  • 索引引用函数的时候不走索引 比如:select * from student where concat(‘name’,‘哈’) =‘王哈哈’

  • 索引用了!=,not,in,or,not in的时候不走索引

  • null列的时候不走索引

  • 数据库的类型转换了不走索引

  • 组合索引的时候必须满足左匹配原则

  • 查询的时候只想取一条数据,那么要用limit 1

5.left join、right join和inner join区别

  • left join和right join是一个外连接 inner join是自连接

  • left join 是查询左表全部,右表相同的数据

  • right join是查询右表全部,左表相同的数据

  • inner join是查询两表共同的数据,取交集

6.数据库索引包括

聚集索引(主键索引):数据库中,所有的行数都是按照主键索引进行排序、非聚集索引:给普通字段加索引、联合索引:好几个字段组成索引

数据库索引结构

主键索引、唯一索引、全文索引、普通索引、组合索引

uuid为什么不做主键

内容较长,是无序的,io查询的次数比较多,一级索引(主键索引)会和二级索引产生关联 除了主键索引以外都是二级索引,uuid可以看做是唯一索引,那么中间会有一个回表的操作除了一级索引不会回表,其他都会回表

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值