Oracle 分析数据库表行长度的统计信息 使用聚簇的步骤

来源  海量数据解决方案

设置 PCTFREE  0.1

如果允许的情况下,尽量为行长度比较短的表创建聚簇,同时不要将单位聚簇的大小设定的过小。

 

ANALYZE TABLE   table_name   COMPUTE STATISTICSL;

SELECT  AVG_ROW_LEN FROM USER_TABLES WHERE TABLE_NAME='table_name';

 

1、创建聚簇

CREATE  CLUSTER sales_cluster (sale_date  varchar2(8)) STORAGE (storage_clurser...) PCTFREE 10 PCTUSED 60 SIZE 20000;

2、创建聚簇索引

CRAETE INDEX sales_cluster_idx ON CLUSTER sales_cluster PCTFREE 2 STORAGE (INITIAL 20K NEXT 10K);

3、为现在使用的表改名字

PNAME sales to sales_copy;

4、在聚簇内部创建表

 CREATE TABLE  sales(

 sale_date varchar2(8) not null,

....

)

CLUSTER sales_cluster (sale_date);

5、向已经创建了的表插入数据

INSERT INTO sales  

SELECT * FROM sales_copy WHERE  sale_date>....

6、删除现有的表,为新创建的表添加所创建的其他索引

 

DROP TABLE sales_copy;

CREATE INDEX ON sales(...);

 

       为了确保聚簇被很好的使用而采用的措施也随之变化,为了提高表连接的效率,在为经常执行表连接的表创建聚簇时,基本上都是把连接列作为聚簇键来使用。对于为了提高大范围数据查询的执行速度而创建的单表聚簇,就需要为其采取必要的措施了。

        不要以聚簇键列为先导列来创建组合索引。提高大范围数据查询的效率是我们创建单表聚簇的目标,利用它来提高使用   = 比较数据库查询的执行速度,但是在很多情况下也希望使用它来提高LIke 或 Between 运算的大范围数据查询的执行速度。

       在此情况尽管存在聚簇索引,但是如果仍然以聚簇键列为先导列创建组合索引,则在有些情况下优化器可能不选择使用该聚簇,而选择组合索引。所以,建议不要创建这种类型的索引。

    可以通过固定读取路径的方式来确保聚簇始终被使用  可以使用Hint 来固定执行计划

     SELECT /*+CLUSTER(sales)*/ SUM(count(*)) FROM salses WHERE sale_date BETWEEN  '20150112'   AND '20150120' AND....;

 

转载于:https://www.cnblogs.com/liwenchaoCode/p/8327848.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值