数据库反规范化技术

阅读数:202 评论数:0

跳转到新版页面

分类

数据库

正文

一、为什么要引入反规范化

原因在于规范化的目标是减少冗余,但是与此同时也增加了查询数据的难度。如果系统对查询的频率和性能要求很高,那么就需要引入受控冗余来降低规范化程度。

二、主要反规范化技术

1、增加派生列

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

2、增加冗余列

是指在多个表中具有相同的列,它常用来在查询时避免连接操作。但它需要更多的磁盘空间,同时增加了对表维护的工作量。

3、重新组表

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

4、分割表

有时对表做分割可以提高性能,表分割有两种试:

(1)水平分割

根据一列或多列数据的值把数据行放到两个独立的表中,但水平分割会增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作

(2)垂直分割

把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。如果一个表中某些列常用,而另外一些列不常用,则可以采用这种方式,另外垂直分割可以使数据行变小,一个数据页就能存放更多的数据,在查询时就会减少IO次数。

三、维护数据完整性

无论使用何种反规范化技术,都需要维护数据的完整性。

1、批处理维护

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

2、应用逻辑维护

必须在同一事务中对所涉及的表进行增、删、改操作。由应用逻辑来实现数据完整性风险较大,容易遗漏,特别需求变化时,不易维护。

3、触发器

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




相关推荐

一、概述 事物处理技术主要包括数据库恢复技术和并发控制技术。 所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做。事务通常以begin transaction开始,以commit或ro

在用户看来,关系模型的数据的逻辑结构是一张二维表。关系模式中常用的关系操作包括:选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Inte

数据库:长期存储在计算机内的、有组织的、可共享的数据集合。 数据库管理系统的功能: (1)提供数据定义语言(Data Definition Language,DDL)

一、B-tree 我们常见的数据库系统,其索引使用的数据结构多是B-Tree或者B+Tree。例如,MsSql使用的是B+Tree,Oracle及Sysbase使用的是B-Tree。所以在最开始,简单

CAP理论 (1)Consistency一致性,任何

经纬度保留到小数点后7位,精度就是1cm,所以mysql数据库保存经纬度常用decimal(10,7)。因为decimal在mysql中以字符串存储,所以相对于float来说更精确,相对于字符串

0、时序数据库的特点 (1)按时间顺序写入,没有更新与删除操作。 (2)写多读少 1、时间序列模型 每个数据结构如下: <

通常分为六个阶段: 一、需求分析 需求分析不仅要明确用户的各种需求,还要充分考虑今后可能的扩充与改变。常用结构化分析方法(SA, Structured Analysis),即自上而下,逐层分解的方式分

1、创建备份目录 cd /home mkdir backup cd backup 2

在关系数据库中,数据库完整性主要包括: 1、实体完整性 (1)主码值必须唯一。 (2)主码的各个属性必须都不为空。 2、参照完整性