数据库的横向和纵向分表

本文介绍了两种分表策略:横向分表与纵向分表。横向分表有助于避免数据冗余并简化数据管理;纵向分表则适用于大规模数据集,通过分散存储减轻单一数据库的压力,从而提高整体性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、横向分表

避免数据冗余,符合第三范式,让数据管理没有那么麻烦,但是设计的时候为了性能,可以做出妥协。


2、纵向分表

对于互联网公司来讲,数据有可能是几亿级别,如果在一个数据库的一张表中存储,数据库可能运转不过来,可以通过取模的方式来分成多个数据库和多张相同的表来减少每张表的数据量,提高性能。

### Oracle 数据库分表方法及策略 #### 1. 水平分表 (Horizontal Partitioning) 水平分表是指按照某些条件将记录分布到不同的物理分区中,而这些分区仍然属于同一个逻辑表。这种方式能够有效提升查询效率并减少单个表的数据量。 对于Oracle数据库而言,可以通过创建带有`PARTITION BY RANGE`, `LIST`, 或者 `HASH`子句的表来实现这一目标[^3]: ```sql CREATE TABLE sales ( prod_id NUMBER, cust_id NUMBER, time_id DATE, channel_id CHAR(1), promo_id NUMBER(6), quantity_sold NUMBER(10,2), amount_sold NUMBER(10,2) ) PARTITION BY RANGE (time_id) ( PARTITION Q1 VALUES LESS THAN (TO_DATE('01-APR-2021','DD-MON-YYYY')), PARTITION Q2 VALUES LESS THAN (TO_DATE('01-JUL-2021','DD-MON-YYYY')), PARTITION Q3 VALUES LESS THAN (TO_DATE('01-OCT-2021','DD-MON-YYYY')) ); ``` 上述SQL语句定义了一个按时间范围划分的销售数据表,在实际应用中可以根据业务需求调整具体的字段分区规则。 #### 2. 垂直分表 (Vertical Partitioning) 垂直分表则是指把一张宽表拆分成多张窄表,每张新表只保留原表的一部分列。这种做法有助于降低每次读取时传输的数据量,并使得索引更加高效。 例如,如果有一个包含大量冗余信息的大表,则可以考虑将其分为几个更小的部分: ```sql -- 创建主表保存核心信息 CREATE TABLE customer_core ( id INT PRIMARY KEY, name VARCHAR2(50), email VARCHAR2(100) ); -- 创建辅助表用于存储较少访问的信息 CREATE TABLE customer_detail ( id INT REFERENCES customer_core(id), address TEXT, phone_number VARCHAR2(20) ); ``` 这里展示了如何分离客户基本信息与其他不太常用的内容至不同表格内,从而提高了整体性能表现。 #### 3. 组合方式 有时单独采用某一种分表方案可能无法满足复杂场景下的所有要求;此时便需要综合运用以上两种技术手段——即先做横向切割再纵向细分或将两者顺序颠倒过来执行。具体选择取决于应用程序的具体情况以及预期达到的效果。 除了上述提到的方法外,还可以利用Oracle特有的特性如全局临时表(GLT),物化视图(Materialized View)等工具进一步增强系统的灵活性与响应速度[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值