应合理设计字段类型、范式化程度、主键及索引VARCHAR按需设定长度枚举用TINYINT/ENUM时间用DATETIME/TIMESTAMP金额用DECIMAL避免过度拆表JOIN高频字段可冗余主键优选自增整型复合索引遵循等值→范围→排序顺序。字段类型选太大磁盘和内存都吃亏用 VARCHAR(255) 存手机号、用 TEXT 存状态码、甚至所有字符串都上 LONGTEXT——这类“图省事”的设计会直接拖慢查询、增加缓冲池压力、放大复制延迟。实操建议VARCHAR 长度按业务最大值设比如身份证号固定 18 位就用 VARCHAR(18)不是 VARCHAR(255)枚举类字段如订单状态优先用 TINYINT UNSIGNED 或 ENUM注意 ENUM 排序和字符集陷阱别用 VARCHAR(20)时间字段不用 VARCHAR 存 2024-03-15 14:22:03该用 DATETIME 或 TIMESTAMP后者自动时区转换但范围小1970–2038要留心数值不为零且无小数别用 FLOAT 或 DOUBLE 存金额DECIMAL(10,2) 更安全整型够用就别上 BIGINT尤其主键——它会让二级索引变大一倍过度范式化导致 JOIN 变成性能黑洞把用户姓名、邮箱、地址全拆到 user_profile 表再加个 user_setting、user_stats……查个列表就要 5 张表 JOIN哪怕都有索引执行计划也容易走错缓冲池命中率直线下降。实操建议高频读取的字段如用户昵称、头像 URL、最后登录时间建议冗余在主表用应用层或触发器保证一致性别迷信“完全范式”真正变动频繁又体积大的数据如用户长文本简介、多图 JSON 列表才单独建表且加好覆盖索引JOIN 超过 3 张表时先看执行计划里有没有 Using temporary 或 Using filesort有基本就是范式过头了MySQL 8.0 支持函数索引可以用 JSON_EXTRACT(profile, $.city) 建索引减少反范式字段数量没主键或主键设计不合理索引和复制全乱套用 UUID 或 MD5 当主键或者干脆用 INT 但没设 UNSIGNED 和 AUTO_INCREMENT这会导致聚簇索引碎片严重、插入变随机、从库延迟飙升。 Vozo Vozo是一款强大的AI视频编辑工具可以帮助用户轻松重写、配音和编辑视频。