在数据库设计的时候,用户可能会遇到这种问题:是否应该把所有表都按照第三范式来设计?表里面的字段到底该设置为多大才合适?
一、优化表的数据类型
虽然在设计的时候需要考虑字段的长度留有一定的冗余,但不推荐很多字段留有很大的冗余,这样既浪费磁盘存储空间,同时在应用程序操作时也浪费物理内存。
在MySql 中可以使用函数PROCEDURE ANALYSE() 对当前应用的表进行分析,该函数可以对数据表中列的数据类型提出优化建议。
select * from tbl_name PROCEDURE ANALYSE();
//不要为包含的值多于16个或者256个字节的ENUM类型提出建议
select * from tbl_name PROCEDURE ANALYSE(16,256);
二、通过拆分提高表的访问效率
- 垂直拆分
- 水平拆分
三、逆规范化
规范化越高,产生的关系越多,关系多直接结果就是导致表之间的连续操作越频繁。反规范的好处就是降低连续操作的需求、降低外码和索引的数目,还可能减少表的数目。
- 增加冗余列
- 增加派生列
- 重新组表
- 分割表
四、使用中间表提高统计查询速度
对于数据量较大的表,在其进行统计查询会效率很低,我们可以通过中间表进行查询。中间表的有点是:
- 在中间表上做统计查询不会对在线应用产生负面的影响
- 中间表可以灵活添加索引或者临时增加新字段,从而提高统计查询效率和辅助统计查询作用。
中间表的原理
查询最近一周的数据
insert into tmp_table select * from table where create_time>(now(),-7)