数据库反规范化技术
阅读数:202 评论数:0
跳转到新版页面分类
数据库
正文
一、为什么要引入反规范化
原因在于规范化的目标是减少冗余,但是与此同时也增加了查询数据的难度。如果系统对查询的频率和性能要求很高,那么就需要引入受控冗余来降低规范化程度。
二、主要反规范化技术
1、增加派生列
指增加的列由其它表中的数据计算生成,它的作用是在查询时减少连接操作,避免使用集函数。
2、增加冗余列
是指在多个表中具有相同的列,它常用来在查询时避免连接操作。但它需要更多的磁盘空间,同时增加了对表维护的工作量。
3、重新组表
指如果查询需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
4、分割表
有时对表做分割可以提高性能,表分割有两种试:
(1)水平分割
根据一列或多列数据的值把数据行放到两个独立的表中,但水平分割会增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作
(2)垂直分割
把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。如果一个表中某些列常用,而另外一些列不常用,则可以采用这种方式,另外垂直分割可以使数据行变小,一个数据页就能存放更多的数据,在查询时就会减少IO次数。
三、维护数据完整性
无论使用何种反规范化技术,都需要维护数据的完整性。
1、批处理维护
指对复制列或派生列的修改积累一定的时间后,运行一批处理或存储过程对复制或派生列进行修改,这只能在对实时性要求不高的情况下使用。
2、应用逻辑维护
必须在同一事务中对所涉及的表进行增、删、改操作。由应用逻辑来实现数据完整性风险较大,容易遗漏,特别需求变化时,不易维护。
3、触发器
对数据的任何修改立即触发对复制列或派生列的相应修改。是实时的,处理逻辑只在一个地方出现,易于维护,一般来说,是解决这类问题的最好的办法。
相关推荐
一、概述
事物处理技术主要包括数据库恢复技术和并发控制技术。
所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做。事务通常以begin transaction开始,以commit或ro
在用户看来,关系模型的数据的逻辑结构是一张二维表。关系模式中常用的关系操作包括:选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Inte
一、B-tree
我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MsSql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。所以在最开始,简单
经纬度保留到小数点后7位,精度就是1cm,所以mysql数据库保存经纬度常用decimal(10,7)。因为decimal在mysql中以字符串存储,所以相对于float来说更精确,相对于字符串
通常分为六个阶段:
一、需求分析
需求分析不仅要明确用户的各种需求,还要充分考虑今后可能的扩充与改变。常用结构化分析方法(SA, Structured Analysis),即自上而下,逐层分解的方式分