• 如何降低索引的clustering_factor


    分类: Oracle

    环境:
    OS:Red Hat Linux As 5
    DB:10.2.0.4
     
    我们知道判断一个索引的好坏可以通过该索引的clustering_factor高低来衡量,clustering_factor越低,索引的使用效果就越好,那怎么样才能降低索引的clustering_factor呢,通常使用的方法是让表的索引字段值按顺序存储,下面通过一个例子说明.
     
    1.创建表并构造无序的数据
    create table scott.tb_index_test
    (
      id number not null,
      name varchar2(30)
    );
     
    create index scott.idx_tb_index_test  on scott.tb_index_test(id);
     
    declare
      l_random_value number;
    begin
      for i in  1 .. 100000 loop
        l_random_value := round(dbms_random.value(1,100000));
        insert into scott.tb_index_test(id) values (l_random_value);
        commit;
      end loop;
    end;
     
    2.分析表
     
    begin
      dbms_stats.gather_table_stats(ownname => 'SCOTT',
                                    tabname => 'TB_INDEX_TEST',
                                    cascade => true);
    end;
     
    3.查看索引当前的clustering_factor
     
    SQL> select ui.clustering_factor, ui.num_rows, ui.index_type, ui.distinct_keys
      from dba_indexes ui where ui.table_name = 'TB_INDEX_TEST';
    CLUSTERING_FACTOR   NUM_ROWS INDEX_TYPE                  DISTINCT_KEYS
    ----------------- ---------- --------------------------- -------------
                99742     100000 NORMAL                             100000
     
    4.将表中的数据按照索引字段存储
     
    create table scott.tmp as select * from scott.tb_index_test;
    truncate table scott.tb_index_test;
    insert into scott.tb_index_test select * from scott.tmp order by id;
     
    5.再次分析表
     
    begin
      dbms_stats.gather_table_stats(ownname => 'SCOTT',
                                    tabname => 'TB_INDEX_TEST',
                                    cascade => true);
    end;
     
    6.这个时候索引的clustering_factor明显降低了
     
    SQL> select ui.clustering_factor, ui.num_rows, ui.index_type, ui.distinct_keys
      from dba_indexes ui where ui.table_name = 'TB_INDEX_TEST';
    CLUSTERING_FACTOR   NUM_ROWS INDEX_TYPE                  DISTINCT_KEYS
    ----------------- ---------- --------------------------- -------------
                  372     100000 NORMAL                             100000
     
    -- The End --
  • 相关阅读:
    AcWing 524. 愤怒的小鸟
    AcWing 算法提高课题解目录
    AcWing 292. 炮兵阵地
    AcWing 798. 差分矩阵
    golang 写数据到excel文件 清明
    使用golang开发mqtt服务压力测试工具 清明
    Linux云服务器安装JDK步骤 清明
    shell monitor memory 清明
    自己实现一个Electron跨进程消息组件(兼新书自荐)
    如何把Electron做成一个Runtime,让多个应用共享同一个Electron
  • 原文地址:https://www.cnblogs.com/weixun/p/2985567.html
Copyright © 2020-2023  润新知