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 --
  • 相关阅读:
    六十三:CSRF攻击与防御之系统准备之登录与转账功能
    六十二:CSRF攻击与防御之系统准备之注册功能
    六十一:Flask.Session之flask操作session
    并发编程之多进程篇之二
    并发编程之多进程篇之一
    网络编程之文件传输实例
    网络编程基础之粘包现象与UDP协议
    网络编程基础之Socket套接字简单应用
    TCP协议的三次握手和四次挥手
    网络编程基础之Socket套接字
  • 原文地址:https://www.cnblogs.com/weixun/p/2985567.html
Copyright © 2011-2022 走看看