大量数据的设计小技巧

时间:2020-12-28 09:00:21

1:建立分区

 随着表的增大,对它的维护也更加困难。在非常大的数据库中,可以通过把一个大表的数 据分成多个小表来大大简化数据库的管理活动。例如,可以根据表中的部门或产品值把一个表 分成独立的小表。 注意分分区只对拥有并安装了分区选项的企业是可用的。 当把一个大表分成若干小表时,可以规定一些范围值供数据库使用,这些称作分区 ( p a r t i t i o n )的小表比大表的管理更加简单。例如,可以完全删除( t r u n c a t e )一个分区的数据而不会 删除其他分区中的数据。O r a c l e将把分区表看作一个大表,但可以把这些分区作为一些独立的对 象来管理。 分区还可以改善应用性能。由于优化器将知道作为分区基础使用的范围值,所以它在访问 表时就可以只使用特定的分区直接查询。因为在查询过程中只浏览少量数据,自然就改善了查 询性能。 除了表外,也可以对索引进行分区,一个分区索引的分区中的范围值可以与索引表使用的 范围相匹配,这种情况的索引叫作局部索引(local index)。如果索引分区不能与表分区的值范围 相匹配,则该索引就叫作全局索引(global index)。 在O r a c l e 8 i中,能够细分分区,创建子分区。例如,可以先根据一组值分割一个表,然后再 根据另一种分割方法分割分区。在O r a c l e 9 i中,除了范围分区与哈希分区之外,还可以创建目录 分区(list partitions)。有关分区、子分区、局部索引和全局索引的管理问题。
 
2: 主要为了防止遍历表查询。
比如 LEFT JOIN, RIGHT JOIN 。这些查询如果能用冗余避免则应尽力避免。
INNER JOIN 则不用担心了。
而且表设计的时候应当尽量避免出现 LEFT JOIN 。
 
3:减少表关联,可增加冗余字段,通过空间来换时间
假如一个论坛库中有用户信息表tbUsers有下列字段 user_id(用户信息编号),user_name(用户名),user_nick(用户昵称)
贴子表tbTopics tpic_id(贴子信息编号),tpic_title(贴子主题),tpic_content(贴子内容),user_id(用户编号)
在实际的贴子显示过程中,我们要在贴子中显示用户昵称时,都是通过tbTopics表中的user_id和tbUsers表进行关联来获取user_nick信息。
上面的两个表的表结构设计根据设计范式不存在问题,但是如果这个论坛的访问量大的话,表的关联的代价就出来了,因为两表关联比访问一个表的代价要大。
因此,我们可以采取在tbTopics表中增加一个冗余字段user_nick,这样显示贴子时不再需要和表tbUsers进行关联了即SELECT * FROM [tbTpocs]即可,不需要SELECT t.*,u.user_nick FROM tbTpoics t LEFT JOIN tbUsers u ON t.user_id=u.user_id来显示获取贴子数据进行显示.