空空叶博客 学习与开发博客

表分割技术

2017-05-05
sql

表分割技术

只有在数据量十分巨大的时候才适合使用

水平分割

根据一列或多列数据的值把数据行放到两个独立的表中,水平分区将表分为多个表。每个表包含的列数相同,但是行更少。

使用情况:

  • 表数据量很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,加快了查询速度。
  • 表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。
  • 需要把数据存放到多个介质上。
  • 需要把历史数据和当前的数据拆分开。

优点:

  • 降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,加快了查询速度。

缺点:

  • 水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在索引用于查询时,表中增加两到三倍数据量,查询时也就增加读一个索引层的磁盘次数。

垂直分割

把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中.

优点:

  • 垂直分割可以使得行数据变小,一个数据块(Block)就能存放更多的数据,在查询时就会减少I/O次数(每次查询时读取的Block 就少)。
  • 垂直分割表可以达到最大化利用Cache的目的。

缺点:

  • 表垂直分割后,主码(主键)出现冗余,需要管理冗余列
  • 会引起表连接JOIN操作(增加CPU开销)需要从业务上规避

库表散列

表散列与水平分割相似,但没有水平分割那样的明显分割界限,采用Hash算法把数据分散到各个分表中, 这样IO更加均衡。


上一篇 游戏笔记

下一篇 面向对象基础

目录