oracle实验3:创建分区表

xy 201810414224 软工2班

实验3:创建分区表

实验目的:

掌握分区表的创建方法,掌握各种分区方式的使用场景。

实验内容:

  • 本实验使用3个表空间:USERS,USERS02,USERS03。在表空间中创建两张表:订单表(orders)与订单详表(order_details)。
  • 使用你自己的账号创建本实验的表,表创建在上述3个分区,自定义分区策略。
  • 你需要使用system用户给你自己的账号分配上述分区的使用权限。你需要使用system用户给你的用户分配可以查询执行计划的权限。
  • 表创建成功后,插入数据,数据能并平均分布到各个分区。每个表的数据都应该大于1万行,对表进行联合查询。
  • 写出插入数据的语句和查询数据的语句,并分析语句的执行计划。
  • 进行分区与不分区的对比实验。
    CREATE PLUGGABLE DATABASE xydb FROM pdborcl file_name_convert=(’/home/oracle/app/oracle/oradata/orcl/pdborcl’,’/home/student/pdb/xydb’);

实验参考步骤

给xy权限

在这里插入图片描述

建表

在主表orders和从表order_details之间建立引用分区
在study用户中创建两个表:orders(订单表)和order_details(订单详表),两个表通过列order_id建立主外键关联。orders表按范围分区进行存储,order_details使用引用分区进行存储。
创建orders表的部分语句是:

SQL> CREATE TABLE orders 
(
 order_id NUMBER(10, 0) NOT NULL 
 , customer_name VARCHAR2(40 BYTE) NOT NULL 
 , customer_tel VARCHAR2(40 BYTE) NOT NULL 
 , order_date DATE NOT NULL 
 , employee_id NUMBER(6, 0) NOT NULL 
 , discount NUMBER(8, 2) DEFAULT 0 
 , trade_receivable NUMBER(8, 2) DEFAULT 0 
) 
TABLESPACE USERS 
PCTFREE 10 INITRANS 1 
STORAGE (   BUFFER_POOL DEFAULT ) 
NOCOMPRESS NOPARALLEL 
PARTITION BY RANGE (order_date) 
(
 PARTITION PARTITION_BEFORE_2016 VALUES LESS THAN (
 TO_DATE(' 2016-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 
 'NLS_CALENDAR=GREGORIAN')) 
 NOLOGGING 
 TABLESPACE USERS 
 PCTFREE 10 
 INITRANS 1 
 STORAGE 
( 
 INITIAL 8388608 
 NEXT 1048576 
 MINEXTENTS 1 
 MAXEXTENTS UNLIMITED 
 BUFFER_POOL DEFAULT 
) 
NOCOMPRESS NO INMEMORY  
, PARTITION PARTITION_BEFORE_2017 VALUES LESS THAN (
TO_DATE(' 2017-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 
'NLS_CALENDAR=GREGORIAN')) 
NOLOGGING 
TABLESPACE USERS02 
...
);
建表截图

在这里插入图片描述

数据数量查询

在这里插入图片描述

建立分区表order_details

创建order_details表的部分语句如下:

SQL> CREATE TABLE order_details 
(
id NUMBER(10, 0) NOT NULL 
, order_id NUMBER(10, 0) NOT NULL
, product_id VARCHAR2(40 BYTE) NOT NULL 
, product_num NUMBER(8, 2) NOT NULL 
, product_price NUMBER(8, 2) NOT NULL 
, CONSTRAINT order_details_fk1 FOREIGN KEY  (order_id)
REFERENCES orders  (  order_id   )
ENABLE 
) 
TABLESPACE USERS 
PCTFREE 10 INITRANS 1 
STORAGE (   BUFFER_POOL DEFAULT ) 
NOCOMPRESS NOPARALLEL
PARTITION BY REFERENCE (order_details_fk1)
(
PARTITION PARTITION_BEFORE_2016 
NOLOGGING 
TABLESPACE USERS --必须指定表空间,否则会将分区存储在用户的默认表空间中
...
) 
NOCOMPRESS NO INMEMORY, 
PARTITION PARTITION_BEFORE_2017 
NOLOGGING 
TABLESPACE USERS02
...
) 
NOCOMPRESS NO INMEMORY  
);
建表结果

在这里插入图片描述

查看数据库的使用情况

以下样例查看表空间的数据库文件,以及每个文件的磁盘占用情况。
在这里插入图片描述

执行计划分析

有分区sql
#查看不同分区的数据
set autotrace on
select * from xy.orders where order_date
between to_date('2010-1-1','yyyy-mm-dd') and to_date('2021-4-5','yyyy-mm-dd');

在这里插入图片描述

无分区sql
set autotrace on
select * from xy.orders_details where order_date
between to_date('2010-1-1','yyyy-mm-dd') and to_date('2021-4-6','yyyy-mm-dd');

在这里插入图片描述

实验总结

通过本次实验,我了解并且掌握分区表的创建方法,并且还掌握各种分区方式的使用场景。就数据量来说,根据有分区和无分区sql语句的比较,在orders数据量为10000,order_details数据量为30000时,有分区比无分区查找数据优势会更大。如果数据量大,分区表的优势明显加大。 如果数据量小,有分区与无分区差别不是很大,甚至无分区可能更快。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值