码迷,mamicode.com
首页 > 数据库 > 详细

优化数据库对象

时间:2017-06-29 23:51:06      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:nal   语句   包含   灵活   表之间   并且   操作   nio   rom   

 

procedure analyse()


 

优化表的数据类型 使用procedure analyse()对当前应用的表进行分析 

select * from table_name procedure analyse();

 

select * from table_name procedure analyse(16,256);

 

第二个语句告诉procedure analyse()不要为那些包含的值多余16个或者256个字节的ENUM类型提出建议

 

select * from rental procedure analyse()\G;

 

技术分享

 

File_name 列的名字
Min_Value 列种的最小值
Max_Value 列中的最大值
Min_length 列种值最小的长度
Max_length 列中值最大的长度
Optimal_fieldType 给出的建议

 

 

拆分提高表的访问效率


 

 

垂直拆分

如果一个表中某些列常用,而另一些列不常用,则可以采用垂直拆分。 

垂直拆分的优点

垂直拆分可以使数据行变小,一个数据页就能存放更多的数据,在查询时就会减少I/O次数。

缺点

需要管理冗余列,查询所有数据需要join操作。

 

水平拆分

根据一列或者多列数据的值把数据行放在两个独立的表中

优点

表很大,分割后可以降低在查询时需要读的数据与索引的页数,同时也降低了索引的层数,提高了查询的速度。

表中的数据本来就有独立性,例如:表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用

缺点

需要把数据存在多个介质上

水平拆分会给应用增加复杂度,查询所有的数据需要UNION操作。

 

逆规范化


 

 

规范化:

规范化越高,那么产生的关系就越多,关系越多的直接结果就是导致表之间的连接操作越频繁。表之间的连接操作是性能较低的操作,直接影响到查询的速度。

 

反规范化:

反规范的好处是降低连接操作的需求,降低外键和索引的数目,还可能减少表的数目。加快查询速度,但会降低修改速度。

 

反规范化分类:

增加冗余列

多个表中具有相同的列,常用来在查询时避免连接操作

派生列

增加的列来自其他表的数据,其他表中的数据是经过计算生成。作用是在查询时减少连接操作,避免使用集函数

重新组表

如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能

分割表

垂直分割与水平分割

 

维护反范式数据的完整性常用方法

批处理

批处理维护是指对复制列或者派生列的修改累积一定时间后,运行一批处理作业或者存储程序对复制列或派生列进行修改,只能在对实时性要求不高的情况下使用

应用逻辑

数据的完整行也可由应用逻辑来实现,这就要求必须在同一事务中对所有涉及的表进行增,删,改操作,用应用逻辑来实现数据的完整性风险性大,因为在同一逻辑必须在所有的应用中使用和维护,容易遗露,特别是在需求变化时,不易于维护。

触发器

对数据的任何修改立即触发对复制列或派生列的相应修改,触发器是实时的,而且相应的处理逻辑只在一个地方出现,易于维护。一般来说,是解决这类问题比较好的办法

 

 

使用中间表提高统计查询的速度


 

 

对于数据量大的表,在其上进行统计查询通常效率低,并且还要考虑统计查询是否会对在线的应用产生影响。在这种情况下,使用中间表可以提高统计查询的效率,

 

优点

中间表复制原表部分数据,并且与原表相隔离,在中间表上做统计查询不会对在线应用产生负面影响。

 

可以灵活地添加索引,增加临时用的新字段,从而达到提高统计查询效率和辅助统计查询的作用

 

 

技术分享

技术分享

 

优化数据库对象

标签:nal   语句   包含   灵活   表之间   并且   操作   nio   rom   

原文地址:http://www.cnblogs.com/dsitn/p/7096609.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!