oracle聚簇实例演示

一、聚簇概念定义

聚簇表是一种特殊的结构。一个聚簇由多个表组成,几个表共享相同的数据块。
一个聚簇有一个或者多个公共的列,多表共享这些列,我们把这样的列叫聚簇关键字(Cluster key)
oracle 把多个表的数据物理地址存储在一起,以加速表的连接

创建聚簇后,才能在聚簇中创建表,这些表叫聚簇表,在往聚簇表中插入数据之前必须在聚簇是上创建聚簇索引。
只有满足下面两个条件才适合使用聚簇
1、建立聚簇表的目的是为了查询,不是为了修改,频繁修改的表不适合创建成聚簇表
2、查询时,常常对聚簇中的多个表进行连接,

二、创建聚簇

create cluster cl_sales_customers(cust_id number)

create cluster 指定创建聚簇,cl_sales_customers 是聚簇的名字;cust_id是聚簇关键字,聚簇中的所有聚簇表共享这一列。
本例创建sales 表和customers表关联需要用到的关键字cust_id

三、创建聚簇表

创建聚簇表的实质就是把表加入到聚簇中,在创建聚簇表之前,必须创建好聚簇。
根据刚才创建的聚簇 salses表和customers表关联的聚簇cl_sales_customers
再创建聚簇表 SALES_FOR_CL

CREATE TABLE SALES_FOR_CL
   (  PROD_ID NUMBER NOT NULL ENABLE, 
  CUST_ID NUMBER NOT NULL ENABLE, 
  TIME_ID DATE NOT NULL ENABLE, 
  CHANNEL_ID NUMBER NOT NULL ENABLE, 
  PROMO_ID NUMBER NOT NULL ENABLE, 
  QUANTITY_SOLD NUMBER(10,2) NOT NULL ENABLE, 
  AMOUNT_SOLD NUMBER(10,2) NOT NULL ENABLE  
   ) 
   CLUSTER  cl_sales_customers(cust_id)

创建聚簇表CUSTOMERS_FOR_CL

 CREATE TABLE  CUSTOMERS_FOR_CL 
   (  CUST_ID NUMBER NOT NULL ENABLE, 
  CUST_FIRST_NAME VARCHAR2(20) NOT NULL ENABLE, 
  CUST_LAST_NAME VARCHAR2(40) NOT NULL ENABLE, 
  CUST_GENDER CHAR(1) NOT NULL ENABLE, 
  CUST_YEAR_OF_BIRTH NUMBER(4,0) NOT NULL ENABLE, 
  CUST_MARITAL_STATUS VARCHAR2(20), 
  CUST_STREET_ADDRESS VARCHAR2(40) NOT NULL ENABLE, 
  CUST_POSTAL_CODE VARCHAR2(10) NOT NULL ENABLE, 
  CUST_CITY VARCHAR2(30) NOT NULL ENABLE, 
  CUST_CITY_ID NUMBER NOT NULL ENABLE, 
  CUST_STATE_PROVINCE VARCHAR2(40) NOT NULL ENABLE, 
  CUST_STATE_PROVINCE_ID NUMBER NOT NULL ENABLE, 
  COUNTRY_ID NUMBER NOT NULL ENABLE, 
  CUST_MAIN_PHONE_NUMBER VARCHAR2(25) NOT NULL ENABLE, 
  CUST_INCOME_LEVEL VARCHAR2(30), 
  CUST_CREDIT_LIMIT NUMBER, 
  CUST_EMAIL VARCHAR2(30), 
  CUST_TOTAL VARCHAR2(14) NOT NULL ENABLE, 
  CUST_TOTAL_ID NUMBER NOT NULL ENABLE, 
  CUST_SRC_ID NUMBER, 
  CUST_EFF_FROM DATE, 
  CUST_EFF_TO DATE, 
  CUST_VALID VARCHAR2(1))
  CLUSTER  cl_sales_customers(cust_id)

其实CLUSTER就是把表加到聚簇cl_sales_customers中

三、创建聚簇索引

如果想要把数据插入到聚簇表中,必须在聚簇上创建索引
不然会报错 ORA-02032

在这里插入图片描述

create index idx_sales_customers on cluster cl_sales_customers

然后向聚簇表CUSTOMERS_FOR_CL和SALES_FOR_CL中插入数据

  insert into  CUSTOMERS_FOR_CL select  t.* from  CUSTOMERS  t;
   insert into  SALES_FOR_CL select  t.* from  SALES  t

四、删除聚簇

我们可以使用drop cluster 命令删除聚簇,但是如果聚簇中包含聚簇表,则必须包含子句including tables

drop cluster cl_sales_customers  including tables;
-- including tables 表示连聚簇表一起删除

五、查看表属于哪个聚簇

查看SALES_FOR_CL 与 CUSTOMERS_FOR_CL 属于哪个聚簇
视图 user_tables all_tables 以及dba_tables 可以查看聚簇信息

SELECT t.TABLE_NAME, t.CLUSTER_NAME
  FROM user_tables t
 WHERE t.TABLE_NAME = 'SALES_FOR_CL'
    OR t.TABLE_NAME = 'CUSTOMERS_FOR_CL';

结果如下图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜的中年程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值