• 如何降低索引的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 --
  • 相关阅读:
    [leetcode]Evaluate Division
    [leetcode]Read N Characters Given Read4 II
    [leetcode]Shortest Palindrome
    vim基础
    mac 默认设置python3最新版本环境变量
    mac 如何获取最高权限(关闭安全保护机制)
    mac 终端成功执行scrapy命令
    解决虚拟机VMware下ubuntu16.04LTS打不开软件中心Ubuntu Software
    解决虚拟机VMware下ubuntu16.04LTS异常连不上网
    SOA 服务架构之简介及理解
  • 原文地址:https://www.cnblogs.com/weixun/p/2985567.html
Copyright © 2020-2023  润新知