谈到数据库优化,往往联想到SQL语句的优化,但SQL语句优化并不是数据库优化的全部。
数据库的优化有多种方式
这是不同层面的优化,有硬件级别的优化、系统的合理配置优化(比如连接数、占用内存等)、数据库表结构的优化以及SQL和索引的优化。
硬件和系统配置的优化暂且不谈,先来看看数据库结构的优化。
数据库命名
数据库的命名和编码
数据库命名必须要有规范,命名通常需要和项目名称一致,可以显而易见的知道该数据库属于哪个项目。
数据库的编码要选用合适的字符集,对于使用UTF-8字符集时通常使用utf8mb4而不是utf8。因为UTF-8时每个字符最多四个字节,而MySQL中的utf8每个字符只能存储三个字节。
数据库的所有命名必须使用小写字母,因为MySQL数据库对名称的大小写铭感,且单词之间使用下划线分割。
禁止使用MySQL中的保留关键字。
表的命名
最好在表名中添加数据库命名前缀,比如user表在多个数据库中使用,加上数据库命名的前缀,能清晰知道该表属于哪个数据库。且表的命名最好清晰易懂,能够通过表名知道表中存储的什么数。
合理使用前缀和后缀。临时的表必须用tmp为前缀并用日期为后缀,对于备份的库,表名必须使用bak为前缀,日期为后缀。这样能够知道在对表进行清理时可以更清晰。
表名不要使用复数形式,表名只是表示实体类型,而不是实体数量。
字段名
对于存储相同数据的列,必须统一列的名称和数据类型,为了关联查询时能用上索引。
逻辑设计
范式化设计
数据库设计有多个范式,通常需要满足三大范式:
- 第一范式:表中所有字段都是不可再分
学生表 | ||||
班级 | 姓名 | 课程 | ||
语文 | 数学 | 英语 |
比如这样的复合表就是不允许的
- 第二范式:表中必须存在主键,且非主键必须完全依赖于全部主键。
如果表中只有一个列作为主键,那么该表就符合第二范式。
否则需要考虑非主键是否满足第二范式的要求。