zoukankan      html  css  js  c++  java
  • 如何降低索引的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 --
  • 相关阅读:
    五条面试忠告
    NET平台微服务
    CentOS,net core2 sdk nginx、supervisor、mysql
    搭建基于java环境
    产生唯一随机码的方法分析
    SpringBoot JPA 专题
    关于 MySQL 的 boolean 和 tinyint(1)
    org.springframework.data.mapping.PropertyReferenceException: No property created found for type
    交流心得
    github如何删除一个repository(仓库)
  • 原文地址:https://www.cnblogs.com/weixun/p/2985567.html
Copyright © 2011-2022 走看看