基础概念:MySQL 定位与特点
MySQL 是一款开源的关系型数据库管理系统(RDBMS),基于 SQL 语言构建。它凭借轻量级、高性能、高可用和易部署的特性,成为互联网行业的首选存储方案,广泛应用于电商、金融、社交等场景。
其核心特性包括:
- 关系型支持:完整支持 ACID 事务、外键约束及多表关联查询。
- 高性能存储:底层优化出色,单表千万级数据查询依然高效。
- 插件式引擎:支持多种存储引擎,默认
InnoDB,兼容MyISAM。 - 高可用架构:原生支持主从复制、读写分离及集群部署,有效规避单点故障。
- 跨平台适配:兼容 Linux、Windows、Mac 等主流服务器系统。
存储引擎与数据类型选型
InnoDB 与 MyISAM 的区别
MySQL 5.5 之后默认引擎为 InnoDB。它是事务安全型引擎,支持行级锁和外键;而 MyISAM 是性能型引擎,仅支持表级锁,官方已逐步淘汰。生产环境建议优先使用 InnoDB。
字符串类型:char 与 varchar
两者均为字符串类型,但存储机制不同:
- char(n):定长存储。无论实际内容多少,均占用
n个字符空间,不足补空格。适合手机号、身份证号等长度固定的字段,查询速度极快。 - varchar(n):变长存储。实际占用 = 真实字符长度 + 1/2 字节(记录长度)。适合用户名、地址等长度不确定的字段。
注意:定义 varchar(5) 和 varchar(200) 存入 "abc" 时,实际占用空间相同。MySQL 仅校验是否超限,不会因定义过大浪费空间或降低性能。但建议按需定义,避免字段溢出风险。
日期时间类型:datetime 与 timestamp
- datetime:占 8 字节,范围
1000-01-01 ~ 9999-12-31,不支持时区转换。存入什么时间就显示什么时间。 - timestamp:占 4 字节,范围
1970-01-01 ~ 2038-01-19,支持时区转换(存 UTC,取本地化)。
建议:无跨国业务需求用 datetime 避免 2038 年溢出问题;有跨时区需求可选 timestamp。
索引机制与数据结构
索引分类与区别
- 主键索引(Primary Key):一张表只能有一个,非空且唯一。InnoDB 中为主键聚簇索引,数据按主键排序存储,查询效率最高。建议用自增整型。
- 唯一索引(Unique Key):允许为空(最多一个 null),保证字段值唯一性,如邮箱、手机号。
- 普通索引(Index):可重复、可空,单纯提升查询速度。
- 外键索引(Foreign Key):保证参照完整性。生产环境慎用,通常由业务层维护关联关系。
索引原理与 B+ 树
索引是建立在字段上的特殊数据结构(B+ 树),相当于表的目录。通过索引快速定位数据行,避免全表扫描。
- 无索引:全表扫描,时间复杂度
O(n)。 - 有索引:二分查找,时间复杂度
O(logn)。


