`

Oracle Cluster table And Partition

阅读更多

簇表和分区表:

Oracle 提供了很多种存储数据的表形式。比如Heapcluster.

在项目中我们如何选则物理的存储结构:

Ø  读取的行数存放的比较集中

Ø  SELECT or DML 语句

Ø  表达小

Ø  行大小和数据块大小

Ø  小事务或者大事务

Ø  SELECT 语句使用并行查询

何为簇表?

多个表的数据存放在同一个块之中。

比如一张empdept表。我们经常要在这两张表查询数据,我们就看了一将这两张表放在同一个块中,那么我们就可以用更少的IO获取我们所需要的数据。

SELECT d.dname,e.ename

From dept d ,emp e

Where d.deptno = e.deptno;

 

簇表又可以分为索引簇和哈希簇:

所谓索引簇就是使用索引访问数据。

Hash 簇就是oracle通过哈希函数进行数据的存储。

索引簇适用于表的数据不断的增长。

哈希表适用于标的数据不经常变动,相对静态的表。

-- CLUSTER key dept_id table中这个列可以不命名为dept_id 但是数据类型number必须匹配。

--Size选项是用来告诉Oracle预计有1024字节的数据和每一个Cluster key相关。

--Oracle 将使用这个信息来估算每一个块能容纳的最大cluster数目

--Size太高 每一个block存放很少的key,并且将使用更多的表空间,太低将存放太多的数据连接,将偏离Cluster目的

CREATE CLUSTER e_d_cluster(

  dept_id NUMBER

)SIZE 1024;

 

--如果簇表是index cluster ,那么 我们还需要建簇索引

--作用是:存储一个cluster key ,并且返回包含该keyblock地址

CREATE INDEX e_d_cluster_idx

ON CLUSTER e_d_cluster

 

-- 建表

CREATE TABLE t_department (

    dept_id NUMBER PRIMARY KEY,

    dname VARCHAR2(14),

    loc VARCHAR2(13)

    )CLUSTER e_d_cluster(dept_id);

 

CREATE TABLE t_employee(

    emp_id NUMBER PRIMARY KEY,

    ename VARCHAR2(10),

    job VARCHAR2(10),

    mgr NUMBER,

    hiredate DATE,

    sal NUMBER,

    comm NUMBER,

    dept_id NUMBER REFERENCES t_department(dept_id)

) CLUSTER e_d_cluster(dept_id);

那么Oracle是怎么存放的呢?

文本框: Dept_id = 10(key)
	Dept 表相关数据Dept_id=10
	Emp表相关数据Dept_id=10
Dept_id = 20(key)
	Dept 表相关数据Dept_id=20
	Emp表相关数据Dept_id=20

 

 

 

 

 

 

 

                                                  

--View whether or not the two tables storing together

SELECT DBMS_ROWID.ROWID_BLOCK_NUMBER(t_department.rowid) dept_rid,

DBMS_ROWID.ROWID_BLOCK_NUMBER(t_employee.rowid) emp_rid,

t_department.dept_id

FROM t_department ,t_employee

WHERE t_employee.dept_id = t_department.DEPT_ID

分区表:

1 Data Partitioning 的原因:

表太大不好管理,采取“分而治之”政策。将大表和索引分成容易管理的小块。

2数据分区的概念:我们不仅可以分区还可以进行更进一步的组合分区。

它是一种逻辑分区,不束缚于硬件的架构,完全依赖于业务的需求。

 

3 优缺点的比较:

Advantage:

Ø  增强可用性,如果标的某一个分区出现故障,表在其他分区的数据仍然可以用。

Ø  维护方便,如果某分区故障,只需要修复该分区既可。

Ø  均衡I/O:可以把不同的分区映射到磁盘以平衡I/O.

Ø  改善查询性能:有的放矢(只关心你需要的数据),并行处理(提高批量处理的能力

提高关键数据的可用性。滚动窗口操作。A操作B区,C操作E区,那么F,G区不受影响。

Disadvantage

已经存在的表没有办法可以直接转化为分区表。

 

Oracle传统的分区类型:

范围分区:对数据库表中某一个值范围进行分区,根据该值得范围决定存储在那个分区上。

Hash分区(散列分区):在Column值上使用散列算法。以确定将行放入到那个分区上。当列的值没有合适条件,建议使用散列分区;他通过指定分区编号来均匀分布数据一种分区类型。

List分区:当你需要明确控制将行如何映射到分区时,就使用列表分区方法。适合列的值只有固定的几个。

 

范围分区的适用情况:

适用于连续,按时间排序的数据。

Insert 的时候不需要你指定插入到什么分区,

但是在查询的时候需要指定查看那个分区的数据,否则的话,就查看整张表。

SELECT * FROM INTO PARTION_TEST(part_1);

Update的时候也需要指定分区

UPDATE PARTION_TEST partition(part_2) t set t.pitem ='t_desk' where t.transaction_id=1;

Delete Update也是一样的。

List Partition (列表分区)

适用于不连续域的数据分区,比如位置类的分区。

-- List 分区

CREATE TABLE NGP_SITE(

    site_id varchar2(2) primary key,

    site_name varchar2(10) not null,

);

PARTITION BY LIST(SITE_ID)(

    PARTITION P_SITE1 VALUES('1',’1’,’3’) tablespace space01;

    PARTITION P_SITE7 VALUES('7') tablespace space02;

);

 

--Hash 分区

PARTITION BY HASH(site_name)(

    partition paert01 tablespace p1;

    partition paert02 tablespace p2;

    partition paert03 tablespace p3;

);

-- 分区分为8个 数据分别存储到EMP 8个表空间

PARTITION BY HASH(SITE_NAME) PARTITIONS 8

STORE IN (EMP1,EMP2,EMP3,EMP4,EMP5,EMP6,EMP7,EMP8);

分区的个数建议使用2^n 个。

 

==========================================

非传统分区:

比如范围-列表分区:

 

分区索引

局部分区索引:只在某一个分区里面建立的索引

CREATE INDEX SITE_IDX ON NGP_SITE(SITE_ID) LOCAL(

    PARTITION idx_1 tablespace space01;

    PARTITION idx_1 tablespace space02;

);

本地前缀分区索引:即表的索引列和分区的列一样。

全局分区索引:

CREATE INDEX IDX_TXN_CURRENT ON NFP_SITE(site_id)

GLOBAL PARTITION BY RANGE(SITE_ID)(

    PARTITION plvalues LESS THAN ('028'),----表示成都

    PARTITION plvalues LESS THAN ('021'),----表示上海

);

分享到:
评论

相关推荐

    Oracle系统表查询

    WHERE i.index_name = c.index_name AND i.table_name = 'ACC_NBR'; ``` 6. **序列查询** - **`DBA_SEQUENCES`**: 显示所有序列的详情。 ```sql SELECT * FROM DBA_SEQUENCES; ``` 7. **视图查询** - **`...

    藏经阁-Oracle VS PostgreSQL技术大比拼-21.pdf

    在数据库体系架构上,Oracle采用传统的单一体系,包括存储结构如Heap Table、Cluster Table等,而PostgreSQL则有Heap Table、Table Partition等。PolarDB则创新地将计算与存储分离,提高了扩展性和资源利用率。 ...

    oracle优化------缓存对象与数据

    - `TABLEPARTITION`: 分区表。 - `NESTEDTABLE`: 嵌套表。 - `ROLLBACK`: 回滚段。 - `LOBPARTITION`: LOB分区。 - `LOBSEGMENT`: LOB段。 - `INDEX`: 普通索引。 - `TABLE`: 表。 - `CLUSTER`: 聚簇表。 - `TYPE2...

    ORACLE语言

    Oracle语言,即Oracle数据库的操作语言,是使用最广泛的关系型数据库管理系统(RDBMS)之一。自1979年首次推出以来,Oracle数据库经历了多个版本的发展,成为了企业级数据库解决方案的代表。接下来,我们将根据给定...

    oracle培训资料

    - **分区 (Partition)**: 将表分割成较小的部分以提高性能。 - **函数/过程/包 (Function/Procedure/Package)**: 可重用的代码块。 - **触发器 (Trigger)**: 在特定事件发生时自动执行的PL/SQL代码块。 - **类型 ...

    Oracle高级培训.ppt

    数据库存储结构的管理涉及段的分类,如Table Segment、Index Segment、Cluster Segment、Partitioned Segment、LOB Segment、Bootstrap Segment和Nested Table Segment。例如,Index-organized Table是一种特殊的表...

    数据库操作处理笔记

    create table table_name (columns) partition by range (partition_column) (partition p1 values less than (value1), partition p2 values less than (value2)); ``` - 列表分区: ```sql create table table...

    阿里巴巴的Oracle DBA笔试题参考答案

    1. 表连接方式:hash join、merge join、nest loop(cluster join)、index join等。 2. 查看SQL执行计划:使用set autot on,explain plan set statement_id = &item_id for &sql;,select * from table(dbms_...

    Oracle Database 1Z0-515 考试题库

    1. **RAC Cluster**:Real Application Clusters (RAC) 是 Oracle 提供的一种集群解决方案,用于实现高可用性和高性能。 **解析:** - 选项 a 错误,少数大型节点并不一定总比许多小型节点表现更好; - 选项 b 错误...

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    mycat2(mycat2映射关系.pdf)

    8. 分片规则(Partition Rule):定义逻辑表的分片规则,例如:horizontal partitioning、vertical partitioning等。 9. 读写分离规则(Read/Write Split Rule):定义逻辑表的读写分离规则,例如:master/slave、...

    将近1300行的sql执行计划

    这些操作可以包括`SELECT STATEMENT`、`UNION-ALL`、`FILTER`、`HASH GROUP BY`、`NESTED LOOPS`、`PARTITION RANGE`、`TABLE ACCESS`和`INDEX SCAN`等。 在此案例中,执行计划包含了三个主要的`UNION-ALL`操作,...

    阿里巴巴公司DBA笔试题

    - 查询V$SQL视图:`SELECT SQL_TEXT FROM V$SQL WHERE DISK_READS > 1000 OR (EXECUTIONS > 0 AND BUFFER_GETS / EXECUTIONS > 30000);` - **跟踪特定Session的SQL执行情况**: - 开启SQL跟踪:`EXEC DBMS_SYSTEM....

    数据库 关键字一览表

    Oracle数据库的关键字包括`ACCESS`, `ADD`, `ADMIN`, `AFTER`, `AGENT`, `ALL`, `ALTER`, `ANALYZE`, `AND`, `ANY`, `ARCHIVE`, `ARCHivelog`, `AS`, `ASC`, `AUDIT`, `AUTHENTICATED`, `AUTHORIZATION`, `AVG`, `...

Global site tag (gtag.js) - Google Analytics