1、优化表的数据类型
表需要使用何种数据类型是需要根据应用来判断的。虽然应用设计的时候需要考虑字段的长度留一定的冗余,但是不推荐让很多字段都留有大量的冗余,这种既浪费磁盘存储空间,同时在应用程序操作时也浪费物理内存。
在MySQL中,可以使用函数PROCEDURE ANALYSE()对当前应用的表进行分析,该函数可以对数据表中列的数据类型提出优化建议,用户可以根据应用的实际情况酌情考虑是否实施优化。
2、通过拆分提高表的访问效率
(1)第一种方法是垂直拆分,即把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。
(2)第二种方法是水平拆分,即根据一列或多列数据的值把数据行放到两个独立的表中。
3、逆规范化
常用的逆规范技术有增加冗余列、增加派生列、重新组表和分割表。
(1)增加冗余列:指在多个表中具有相同的列,它常用来在查询时避免连接操作。
(2)增加派生列:指增加的列来自其他表中的数据、由其他表中的数据经过计算生成,增加的派生列作用是在查询时减少连接操作,避免使用集函数。
(3)重新组表:指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
(4)分割表:可以参见上一节内容。
另外,逆规范技术需要维护数据的完整性。无论使用何种逆规范技术,都需要一定的管理来维护数据的完整性。常用的方法是批处理维护、应用逻辑和触发器。
(1)批处理维护是指对冗余列或派生列的修改积累一定的时间后,运行一批处理作业或存储过程对冗余列或派生列进行修改,这只能在对实时性要求不高的情况下使用。
(2)数据的完整性也可由应用逻辑来实现,这就要求必须在同一个事务中对所有涉及的表进行增、删、改操作。用应用逻辑来实现数据的完整性风险较大,因为同一逻辑必须在所有的应用中使用和维护,容易遗漏,特别是在需求变化时,不易于维护。
(3)另一种方式是使用触发器,对数据的任何修改立即触发对冗余列或派生列的相应修改,触发器是实时的,而且相应的处理逻辑只在一个地方出现,易于维护,一般来说,是解决这类问题比较好的办法。
4、使用中间表提高统计查询速度
对于数据量较大的表,在其上进行统计查询通常会效率很低,并且还要考虑统计查询是否会对在线的应用产生负面影响。通常在这种情况下,使用中间表可以提高统计查询的效率。
网友评论