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....;

  • 相关阅读:
    树状数组入门讲解
    注册鼠标右键
    马踏棋盘问题
    先有鸡还是先有蛋
    使用Python-OpenCV向图片添加噪声(高斯噪声、椒盐噪声)
    灰值形态学中的腐蚀与膨胀
    Python-OpenCV——Morphological Transformations(形态学转换)
    Python-OpenCV——Image inverting
    Python-OpenCV中的cv2.inpaint()函数
    UML类图几种关系的总结
  • 原文地址:https://www.cnblogs.com/liwenchaoCode/p/8327848.html
Copyright © 2011-2022 走看看