数据库垂直分表和水平分别到底什么意思
发布网友
发布时间:2022-04-20 06:06
我来回答
共3个回答
懂视网
时间:2022-04-30 09:44
--制造数据不做垂直切分
create table test(
a number,
b varchar2(4000),
c varchar2(4000),
d varchar2(4000),
e varchar2(4000),
f varchar2(4000),
g varchar2(4000),
h varchar2(4000)
);
INSERT INTO test
SELECT ROWNUM,
rpad(‘*‘, 4000, 1),
rpad(‘*‘, 4000, 1),
rpad(‘*‘, 4000, 1),
rpad(‘*‘, 4000, 1),
rpad(‘*‘, 4000, 1),
rpad(‘*‘, 4000, 1),
rpad(‘*‘, 4000, 1)
FROM DUAL
CONNECT BY ROWNUM <= 100000;
commit;
create table test1 as select * from test;
--制造数据做垂直切分
create table test_cuizhi(
a number
);
INSERT INTO test_cuizhi
SELECT ROWNUM
FROM DUAL
CONNECT BY ROWNUM <= 100000;
commit;
create table test_cuizhi1 as select * from test_cuizhi;
--開始測试,仅仅是取两个最小的字段
SQL> set timing on
SQL> set autotrace traceonly
SQL> select t.a,t1.a from test t, test1 t1 where t.a=t1.a;
已选择100000行。
已用时间: 00: 00: 53.17
运行计划
----------------------------------------------------------
Plan hash value: 2400077556
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 44504 | 1129K| 173K (1)| 00:34:38 |
|* 1 | HASH JOIN | | 44504 | 1129K| 173K (1)| 00:34:38 |
| 2 | TABLE ACCESS FULL| TEST | 44504 | 564K| 87801 (1)| 00:17:34 |
| 3 | TABLE ACCESS FULL| TEST1 | 117K| 1490K| 85344 (1)| 00:17:05 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("T"."A"="T1"."A")
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
52 recursive calls
0 db block gets
795627 consistent gets
534917 physical reads
0 redo size
1664840 bytes sent via SQL*Net to client
73664 bytes received via SQL*Net from client
6668 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
100000 rows processed
SQL> /
已选择100000行。
已用时间: 00: 00: 33.36
运行计划
----------------------------------------------------------
Plan hash value: 2400077556
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 44504 | 1129K| 173K (1)| 00:34:38 |
|* 1 | HASH JOIN | | 44504 | 1129K| 173K (1)| 00:34:38 |
| 2 | TABLE ACCESS FULL| TEST | 44504 | 564K| 87801 (1)| 00:17:34 |
| 3 | TABLE ACCESS FULL| TEST1 | 117K| 1490K| 85344 (1)| 00:17:05 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("T"."A"="T1"."A")
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
795446 consistent gets
552087 physical reads
0 redo size
1664840 bytes sent via SQL*Net to client
73664 bytes received via SQL*Net from client
6668 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
100000 rows processed
SQL> select t.a,t1.a from test_cuizhi t, test_cuizhi1 t1 where t.a=t1.a;
已选择100000行。
已用时间: 00: 00: 06.17
运行计划
----------------------------------------------------------
Plan hash value: 2501302817
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 88629 | 2250K| | 310 (2)| 00:00:04 |
|* 1 | HASH JOIN | | 88629 | 2250K| 2168K| 310 (2)| 00:00:04 |
| 2 | TABLE ACCESS FULL| TEST_CUIZHI | 88629 | 1125K| | 42 (3)| 00:00:01 |
| 3 | TABLE ACCESS FULL| TEST_CUIZHI1 | 101K| 1288K| | 39 (3)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("T"."A"="T1"."A")
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
52 recursive calls
0 db block gets
7139 consistent gets
153 physical reads
0 redo size
1664840 bytes sent via SQL*Net to client
73664 bytes received via SQL*Net from client
6668 SQL*Net roundtrips to/from client
2 sorts (memory)
0 sorts (disk)
100000 rows processed
SQL> /
已选择100000行。
已用时间: 00: 00: 06.06
运行计划
----------------------------------------------------------
Plan hash value: 2501302817
-------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 88629 | 2250K| | 310 (2)| 00:00:04 |
|* 1 | HASH JOIN | | 88629 | 2250K| 2168K| 310 (2)| 00:00:04 |
| 2 | TABLE ACCESS FULL| TEST_CUIZHI | 88629 | 1125K| | 42 (3)| 00:00:01 |
| 3 | TABLE ACCESS FULL| TEST_CUIZHI1 | 101K| 1288K| | 39 (3)| 00:00:01 |
-------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("T"."A"="T1"."A")
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
0 recursive calls
0 db block gets
7008 consistent gets
0 physical reads
0 redo size
1664840 bytes sent via SQL*Net to client
73664 bytes received via SQL*Net from client
6668 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
100000 rows processed
版权声明:本文博客原创文章,博客,未经同意,不得转载。
数据库设计--垂直拆分数据
标签:
热心网友
时间:2022-04-30 06:52
垂直分表,指的是把主键字段拿出来,分的两个表都有,然后原表其他字段根据实际情况,例如查询频率,放两个表中。
水平分表相当于数据存储拆开,建多个表,每个表字段完全一样,存放不同数据,例如按照月份存放
热心网友
时间:2022-04-30 08:10
分库!举个例子
有10万员工信息,可以建10个表
每表存放1万员工。他们结构是一样的就表名差异,一表放的员工是工号1到9999的相近信息。
另一种就一个表但内部分区,数据放在不同的物理文件中。
数据库垂直分表和水平分别到底什么意思
垂直分表,指的是把主键字段拿出来,分的两个表都有,然后原表其他字段根据实际情况,例如查询频率,放两个表中。水平分表相当于数据存储拆开,建多个表,每个表字段完全一样,存放不同数据,例如按照月份存放
数据库水平拆分和垂直拆分 怎么实现
垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表 通常我们按以下原则进行垂直拆分:把不常用的字段单独放在一张表;把text,blob等大字段拆分出来放在附表中;经常组合查询的列放在一张表中;垂直拆分更多时候就应该在数据表设计之初就执行的步骤,然后查询的时候用join关键起来即可;水平拆分 水...
数据库水平分库和垂直分库有什么区别
一般来说,就是按照用户属性(地市或者ID的hash)进行分库,或者按照业务功能块进行分库。水平分库方式主要根据用户属性(如地市)拆分物理数据库。一种常见的方式是将全省划分为个大区。垂直分库方式:根据业务维度和数据的访问量等,进行数据的分离,剥离为多个数据库。例如,将一些公用的配置信息存储到一个数据库中进行单独...
数据库反范式化表设计和表的垂直和水平拆分什么意思?
是根据主要查询条件,水平分表。例如,用户关系表, 根据用户id:用户id为 1, 2, 3, 4,5 的五个用户,采用取模的方式水平分表。将uid mod 3,取余数 这样,id为1,4的用户就在 t_user_1 的表里, id 为2,5 的用户在 t_user_2的表里,id为3的就在t_user_3的表里。这样,所...
Mycat分库分表拆分策略——垂直分库、水平分表(水平分表分片规则)
Mycat的拆分策略主要包括垂直分库和水平分表。垂直分库是根据业务逻辑将表分布在不同的数据库中,例如,将购物、订单和用户相关表分别存储在不同数据库,以分散压力。而水平分表则是将表中的数据根据规则分布到多个数据库中,以应对大数据量的管理。在垂直拆分(分库)示例中,假设我们有一个包含商品、...
一文搞懂MySQL数据库分库分表
垂直分库:根据业务模块划分,如电商系统中的用户、商品、订单等独立数据库,便于独立变更和隔离影响。 水平分表(不建议):对大表的拆分,如订单表按规则切分到多张表,但仍存在库级IO瓶颈。 水平分库分表:将单表数据分散到多个服务器,每个服务器有自己的库和表,有效缓解性能瓶颈。1.2 区分...
分表是什么意思?
在数据库中,为了能够更高效地存储和检索数据,经常需要将一个大表拆分成多个小表,这就是所谓的分表。分表可以提高查询的速度,并且减少锁的冲突,从而提高系统的并发性能。分表的实现方法主要有两种:垂直分表和水平分表。垂直分表指的是按照不同的业务功能,将同一张表中的不同字段划分到不同的表...
数据库怎么拆分表
数据库拆分表可分为水平拆分和垂直拆分,水平拆分是按照表中逻辑关系和相关条件把表拆分成多个分表;垂直拆分是按照不同表切分到不同数据库中去。随着数据的不断扩大,有的数据表的规模会以几何级增长,当数据达到一定规模时,数据的查询,读取性能就会变得缓慢,这时就需要拆分数据表,接下来在文章中将...
MySQL如何实现分库分表,如何提高查询效率
在大型电商网站中,随着业务的增多,数据库中的数据量也是与日俱增,这时候就要将数据库进行分库分表了。1、如何分库分表?两种解决方案:垂直拆分、水平拆分垂直拆分:根据业务进行拆分,比如可以将一张表中的多个字段拆成两张表,一张是不经常更改的,一张是经常改的。水平拆分:即根据表来进行分割:...
探秘MySQL单表上亿数据解析高效数据管理技巧mysql上亿单表
水平分表 水平分表是把一个表按照一定的规则“横向”切割成多个表,每张表存储一段数据范围。在查询数据时,需要对多个表进行查找,因此也需要对查询语句进行优化。例如:1. 使用union all将多个表的结果集合并成一个结果集;2. 使用MySQL的分布式查询工具,如MyCat等。垂直分表 垂直分表是将一个表...