本章你将彻底搞懂:VARCHAR 和 CHAR 在存储、性能、内存使用上的本质区别,以及如何根据数据特征选择合适类型。JSON 类型的优缺点,如何用生成列(Generated Column)提升 JSON 查询性能。字段长度对索引大小和查询效率的影响。真实案例:一张 500 万行的表,把 VARCHAR(255) 改成 VARCHAR(20) 后,索引大小从 1.2GB 降到 200MB,查询速度提升 5 倍。另一个案例:滥用 JSON 导致 CPU 飙升,改用生成列后降低 80%。
配套资源:字段类型选择决策树、CHAR/VARCHAR 性能测试脚本、JSON 与生成列对比 SQL、字段长度优化自检清单。
真实踩坑:我曾把一个手机号字段定义为 VARCHAR(255),导致联合索引占用过大内存,命中率极低;还有一次用 JSON 存储用户扩展属性,查询时用JSON_EXTRACT导致全表扫描,数据量到 200 万后接口超时;更坑的是,CHAR(32)存储 MD5 值与VARCHAR(32)性能差异巨大,因为 CHAR 会填充空格,索引效率低。
4.1 一个“VARCHAR(255) 索引炸弹”事故
2019 年我在一家创业公司,负责用户中心优化。某天监控显示一个按照手机号查询用户的接口响应时间从 50ms 涨到 800ms。我查看慢查询日志,发现 SQL 很简单:
订阅专栏 解锁全文

280

被折叠的 条评论
为什么被折叠?



