数据库的垂直分割、水平分割和表列散之间的“纠葛”

1,有时对表做分割可以提高性能。表分割有两种方式:  
1水平分割:根据一列或多列数据的值把数据行放到两个独立的表中。
水平分割通常在下面的情况下使用。
•表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。
•表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。
•需要把数据存放到多个介质上。
  水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在索引用于查询时,表中增加两到三倍数据量,查询时也就增加读一个索引层的磁盘次数。  
2垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。
如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少I/O次数。其缺点是需要管理冗余列,查询所有数据需要join操作。

 

垂直分割: 按列进行分割,即把一条记录分开多个地方保存,每个子表的行数相同。 
水平分割: 按记录进分分割,不同的记录可以分开保存,每个子表的列数相同。 
表散列: 与水平分割相似,但没有水平分割那样的明显分割界限,它由哈希函数和键值决定一条记录的保存文件,这样是为了IO更加均衡。 

以后大家在数据量比较大的情况下就可以试用这些方法来处理了

时间: 2024-09-09 18:54:45

数据库的垂直分割、水平分割和表列散之间的“纠葛”的相关文章

数据库表分割技术浅析(水平分割/垂直分割/库表散列)_oracle

一.水平分割 什么是水平分割?打个比较形象的比喻,在食堂吃饭的时候,只有一个窗口,排队打饭的队伍太长了,都排成S型了,这时容易让排队的人产生焦虑情绪,容易产生混乱,这时一个管理者站出来,增加多个打饭窗口,把那条长长的队伍拦腰截断成几队.更形象一点的理解,你拿一把"手术刀",把一个大表猛的切了几刀,结果这个大表,变成了几个小表. 水平分割根据某些条件将数据放到两个或多个独立的表中.即按记录进分分割,不同的记录可以分开保存,每个子表的列数相同.水平切割将表分为多个表.每个表包含的列数相同,

《IP路由协议疑难解析》一2.4 含毒性逆转的水平分割

2.4 含毒性逆转的水平分割 IP路由协议疑难解析另一项用来预防路由环路的技术名为含毒性逆转的水平分割.启用该特性时,路由器会把从某接口学到的路由,从同一接口向外通告,但会将此类路由标为"中毒",即把路由的度量值设为16(表明与此路由相对应的目的网络不可达).回到图2-1,路由器1从其路由协议邻居路由器2,收到与网络X相对应的路由更新消息,其度量值为1.若路由器1启用了含毒性逆转的水平分割特性,就会"回头"把与网络X相对应的路由向路由器2通告,但会将其度量值设置为1

水平分库分表的关键步骤和技术难点

在之前的文章中,我介绍了分库分表的几种表现形式和玩法,也重点介绍了垂直分库所带来的问题和解决方法.本篇中,我们将继续聊聊水平分库分表的一些技巧. 分片技术的由来 关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量.连接数.处理能力等都很有限,数据库本身的"有状态性"导致了它并不像Web和应用服务器那么容易扩展.在互联网行业海量数据和高并发访问的考验下,聪明的技术人员提出了分库分表技术(有些地方也称为Sharding.分片).同时,流行的分布式系统中间件(例如MongoDB.Elas

server-用C#代码写一个数据库导入系统,只是将excel表导入到SQL2008数据库中

问题描述 用C#代码写一个数据库导入系统,只是将excel表导入到SQL2008数据库中 用C#代码写一个数据库导入系统,只是将excel表导入到SQL2008数据库中, 我用的是offices 2010 前台是一个fileupload控件,一个button控件,选择excel文件,点击button按钮,直接把excel表中的内容导入到SQL数据库中.请问怎么实现这个功能?详细一些,谢谢 解决方案 建议你建两个数据库连接,一个连接excel,一个连接sql2008,然后把excel里数据取出来,

oracle11g-用imp导入数据库时,带有CLOB字段的表都导入不进去!

问题描述 用imp导入数据库时,带有CLOB字段的表都导入不进去! 我语句是这样写的:imp user/password@orcl file=? full=y;请问有什么问题!数据库 oracle11g

android-oracle同一数据库中怎样将一个用户下的表导入或复制到另一个 用户中

问题描述 oracle同一数据库中怎样将一个用户下的表导入或复制到另一个 用户中 ** oracle同一数据库中怎样将一个用户下的表导入或复制到另一个 用户中** 解决方案 oracle把一个用户的表数据复制到另一个用户oracle把一个用户下数据库对象的某个权限赋给另一个用户Oracle当前数据库用户访问另一个用户的表 解决方案二: exp owner=a imp fromuser=a touser=b 解决方案三: exp file=路径 full=y owner=用户1 imp fromu

数据库查询-数据库 关联查询 给予参数 两张表

问题描述 数据库 关联查询 给予参数 两张表 有表一 ID name 表二 ID address 1 123 1 2333 2 456 2 111233 3 3445 4 5667778 两张表通过 内连接 select * from 表1 inner join 表2 course on 表1.ID= 表2.ID 显示 共有的 ID name address 1 123 2333 2 456 111233 我现在我想通过表2的ID 1 查询 表1 的 name 值 sql 语句应该怎么写? 新手

sql 数据库 如何使用update set 解决多表关联修改数据

问题描述 sql 数据库 如何使用update set 解决多表关联修改数据 A表: stuid testid 1 2 3 4 5 1 1 2 1 3 1 1 2 2 2 3 2 B表: stuid testid 1 2 3 4 5 1 1 A B C D A 2 1 B B C A A 3 1 C D A A B 1 2 C C D D D 2 2 B A C A A 3 2 D A D C D C表: testid stid daan fs 1 1 A 3 1 2 B 3 1 3 C 3 1

得了-delphi 7用access2000连数据库,要有至少3张表,用程序怎么编?下周一要交了

问题描述 delphi 7用access2000连数据库,要有至少3张表,用程序怎么编?下周一要交了 delphi 7用access2000连数据库,要有至少3张表,用程序怎么编?下周一要交了 解决方案 http://blog.pfan.cn/MYIT/37378.html 解决方案二: 建议使用 DBEngine,至于数据库中有几张表,那是数据库设计的问题. 解决方案三: 这是编程问题,便用ado控件即可.