19. 优化数据库对象

优化数据库对象

优化表的数据类型

在MySQL中,可以使用PROCEDURE ANALYSE()对当前应用的表进行分析,该函数可以对数据表列的数据类型提出优化建议,用户可以根据应用的实际情况酌情考虑是否实施优化。

使用方法:

select * from tb_name procedure analyse();
# 不为那些包含的值多于16个或者256字节的ENUM类型提出建议
select * from tb_name procedure analyse(16,256);

通过拆分提高表的访问效率

这里所说的“拆分”,是指对数据表进行拆分。如果针对 MyISAM 类型的表进行拆分,那么有两种拆分方法。

(1)垂直拆分

将表中的包含的列部分拆开,转移到另一个表。垂直拆分可以按以下原则进行:

  • 把不常用的字段单独存放到一个表中
  • 把大字段独立存放到一个表中
  • 把经常一起使用的字段放一起

(2)水平拆分

表的水平拆分是为了解决单表的数据量过大的问题,水平拆分的表每一个表的结构都是一致的。

逆规范化

规范化越高,那么产生的关系就越多,关系过多的直接结果就是导致表之间的连接操作越频繁,而表之间的连接操作是性能较低的操作,直接影响到查询的速度,所以对于查询较多的应用就需要根据实际情况运用逆规范化对数据进行设计,通过逆规范化来提高查询的性能。
反规范的好处是降低连接操作的需求、降低外码和索引的数目,还可能减少表的数目,相应带来的问题是可能出现数据的完整性问题。

常用的反规范技术有:增加冗余列、增加派生列、重新组表和分割表。

(1)增加冗余列:指在多个表中具有相同的列,它常用来在查询时避免连接操作。

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

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

(4)分割表:根据需求将一个表分割成多个表存储。

逆规范技术需要维护数据的完整性。无论使用何种反规范技术,都需要一定的管理来维护数据的完整性,常用的方法是批处理维护、应用逻辑和触发器。

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

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

(3)另一种方式就是使用触发器,对数据的任何修改立即触发对复制列或派生列的相应修改。触发器是实时的,而且相应的处理逻辑只在一个地方出现,易于维护。一般来说,是解决这类问题比较好的办法。逆规范技术需要维护数据的完整性。无论使用何种反规范技术,都需要一定的管理来维护数据的完整性,常用的方法是批处理维护、应用逻辑和触发器。

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

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

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

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

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

中间表在统计查询中经常会用到,其优点如下:

  • 中间表复制源表部分数据,并且与源表相“隔离”,在中间表上做统计查询不会对在线应用产生负面影响。
  • 中间表上可以灵活的添加索引或增加临时用的新字段,从而达到提高统计查询效率和辅助统计查询作用。
原文地址:https://www.cnblogs.com/wubug/p/13568332.html