• 如何降低索引的clustering_factor (转)


    环境:
    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
     
  • 相关阅读:
    Docker 0x05: Dockerfile制作镜像
    Docker 0x04: Docker 基本使用
    Docker 0x03:Install Docker
    Docker 0x02: Docker生态
    Docker 0x01:Docker Container容器技术
    Axios发送AJAX请求
    Django学习之十三:提高页面开发效率减少冗余的模板系统
    javascript获取指定区间范围随机数
    完美解决eclipse编辑器中文字符过小问题
    mysql查询表所有列名,并用逗号分隔
  • 原文地址:https://www.cnblogs.com/weixun/p/3023016.html
Copyright © 2020-2023  润新知