zoukankan      html  css  js  c++  java
  • 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....;

  • 相关阅读:
    UVALive
    UVALive
    UVA
    UVALive
    BZOJ3597 SCOI2014方伯伯运椰子(分数规划+spfa)
    BZOJ3456 城市规划(多项式求逆)
    BZOJ4182 Shopping(点分治+树形dp)
    BZOJ4383 Pustynia(线段树+拓扑排序)
    BZOJ4445 SCOI2015小凸想跑步(半平面交)
    BZOJ5311 贞鱼(动态规划+wqs二分+决策单调性)
  • 原文地址:https://www.cnblogs.com/liwenchaoCode/p/8327848.html
Copyright © 2011-2022 走看看