数据库设计要在范式(减少冗余)与性能(查询友好)之间权衡。纯理论的三范式不一定适合业务,实际中常做“适度冗余”换查询性能。
设计时就要想清楚:核心查询路径是什么、数据增长量级、哪些字段会高频筛选排序。
设计原则:先想查询,再定结构;先定约束,再谈性能。
把数据层做稳的关键点。
命名、类型、约束统一。
高频查询字段合理加索引。
一致性、隔离级别、锁。
EXPLAIN、避免全表扫描。
分表分库、读写分离预判。
MySQL/PostgreSQL/MongoDB。
从需求到建表。
识别核心实体、属性与关系,画 ER 图。
定字段、类型、约束,做适度冗余与范式取舍。
按查询路径设计索引,覆盖高频筛选与排序。
用真实数据量验证性能,EXPLAIN 排查慢查询。
索引是把双刃剑,用对是加速器。
| 原则 | 说明 |
|---|---|
| 高频查询加索引 | WHERE/ORDER 常用字段 |
| 避免冗余索引 | 索引不是越多越好 |
| 覆盖索引 | 查询字段包含在索引中 |
| 注意最左前缀 | 组合索引顺序 |
| 避免函数运算 | 列上函数导致索引失效 |
按查询路径建:高频 WHERE、JOIN、ORDER BY 字段。索引有写放大,别为不用的查询建索引。
默认级别通常够用。按一致性与并发需求权衡,读多写少场景可考虑读已提交。
先优化查询与索引,再考虑缓存、读写分离,最后才是分表分库。别一开始就上重方案。
强一致、复杂关系用关系库;高并发、灵活结构、海量日志等场景考虑 NoSQL,按业务特性选型。
