优化数据库对象

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操作。

逆规范化


规范化:

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

反规范化:

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

反规范化分类:

增加冗余列

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

派生列

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

重新组表

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

分割表

垂直分割与水平分割

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

批处理

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

应用逻辑

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

触发器

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

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


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

优点

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

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

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