(4)mysql优化之数据库表设计优化
概述
在数据库设计过程中,用户可能会经常遇到这样的问题:1.表里面的字段到底该设置多长合适?2.是否应该把所有表都按照第三范式来设计?
优化表的数据类型
1.语法
表的数据类型参见链接:
http://blog.csdn.net/pursuing0my0dream/article/details/44729707
在mysql中,我们可以使用函数 procedure analyse()对数据库中的表进行分析,该函数可以对数据表中的列的数据类型提出优化建议。
#语法
select * from table_name procedure analyse();
#或
select * from table_name procedure analyse(element_num,max_memory);
第2个语句中告诉该函数不要为那些包含的值多于element_num个或者max_memory个字节的enum类型提出建议。如果没有这些限制,输出信息可能很长,enum类型定义通常很难阅读。
2.举例
SELECT * FROM c PROCEDURE ANALYSE(16,255);
field_name 对于表哪个字段,optimal_fieldtype给出优化建议。
通过拆分表提高表的访问效率
对数据表的拆分,分为两种拆分方式:垂直拆分,水平拆分
1.垂直拆分(分表)
即把主键和一些数据表的列放在一个表中,然后把主键和另一些数据表的列放在一个表中。
如果一个表的某些列常用,另一些不常用,则可以采用垂直拆分。垂直拆分可以使数据行变小,一个数据页就可以存放更多的数据,在查询时候可以减少I/O次数。其缺点是需要管理冗余列,查询所有数据时候需要join查找。
2.水平拆分(分表,分区)
即把数据表中的列根据一定规则放在多个独立的表或分区中。水平拆分使用场景:
- 表很大,分割后可以降低查询时候需要读取的数据和索引的页数,同时降低索引的层数,提高查询速度。
- 表中的数据是独立的,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另一些数据不常用。
- 需要把数据放在多个存储介质上。
逆规范化
?&esmsp;在数据库设计中,规范化越高,那么产生的关系就越多,直接导致表与表之间的join操作越频繁,而join操作又是一种性能比较低的操作,直接影响到查询的速度。
??反规范化的好处是降低了join操作的需求,降低了外键和索引数目。还可以减少表的个数,相应的带来的问题是可能出现数据的完整性问题。加快查询速度,但会降低修改速度。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。