一、基础核心篇
1. MySQL 是什么?
MySQL 是一款开源的关系型数据库(RDBMS),基于 SQL 语言。它主打轻量、高性能、高可用和易部署,是互联网行业的首选数据库之一。其核心特点包括:
- 关系型特性:支持 ACID 事务、外键、约束及多表关联查询。
- 高性能:底层优化优秀,单表千万级数据查询依然高效。
- 多存储引擎:支持插件式引擎,最常用的是
InnoDB(默认)和MyISAM。 - 高可用:支持主从复制、读写分离及集群部署,有效避免单点故障。
- 跨平台:适配 Linux、Windows、Mac 等主流服务器系统。
2. InnoDB 与 MyISAM 的区别
MySQL 5.5 及以后版本默认使用 InnoDB。InnoDB 是事务安全型引擎,而 MyISAM 更偏向性能型,且已被官方逐步淘汰。在需要事务支持和并发控制的场景下,应优先选择 InnoDB。
3. char 与 varchar 的区别
两者都是字符串类型,核心区别在于存储方式和长度固定性。
- char(n):定长字符串,不足补空格。适合手机号、身份证号等长度固定的场景,查询速度极快。
- varchar(n):变长字符串,实际占用空间为真实字符长度加 1/2 字节。适合用户名、商品标题等长度不固定的场景。
面试坑点:varchar(5) 和 varchar(200) 存储 "abc" 时,存储上无区别,性能上也几乎无差异。MySQL 仅校验是否超过最大长度。建议按需定义字段长度,避免无脑使用 varchar(255)。
4. datetime 与 timestamp 的区别
- datetime:占 8 字节,范围
1000-01-01 ~ 9999-12-31,不支持时区转换,存入什么显示什么。 - timestamp:占 4 字节,范围
1970-01-01 ~ 2038-01-19,支持时区转换(存 UTC,查本地)。推荐优先使用datetime以避免 2038 年溢出问题。
5. 索引类型的区别
- 主键索引:一张表只能有一个,非空且唯一。InnoDB 中主键是聚簇索引,数据按主键排序存储,效率最高。建议使用自增整型。
- 唯一索引:可以有多个,字段值唯一但允许为空(最多一个 null)。
- 普通索引:可以有多个,字段值可重复、可空,主要用于提升查询速度。
- 外键索引:用于建立表间关联,保证参照完整性。生产环境慎用,通常由业务层维护关联。
6. 索引的作用与原理
索引是建立在字段上的特殊数据结构(B+ 树),相当于表的目录。
- 作用:加速查询(避免全表扫描)、加速排序/分组、保证唯一性。
- 原理:无索引需全表扫描(O(n)),有索引通过 B+ 树二分查找(O(logn))。
- 缺点:增删改变慢,占用磁盘空间,过度索引可能导致优化器误判。
7. 最左匹配原则
联合索引的核心规则。创建 (a,b,c) 的联合索引时,MySQL 会优先匹配最左侧字段,依次向右匹配,跳过字段会导致索引失效。
- 生效:
where a=1、where a=1 and b=2。


