简单看一下clustering_factor

简单的说CLUSTERING_FACTOR 用于INDEX 的有序度和表的混乱度之间比较

b*tree index是经过排序的

例如 INDEX中 记录的第一个rowid指向 表所在DATAFILE 中 BLOCK#1 第1行 计数器 记为1,第2个rowid 指向 BLOCK#2 由于改变了块 所以 计数器加1 ,INDEX 第3个rowid

指向BLOCK#2 块没变 所以计数器还为2,接着沿INDEX执行 第4个rowid 指向BLOCK#1 块又变了计数器加1

计数器对应着CLUSTERING_FACTOR 计数器每次从一个块到另一个新块时候加1 这样CLUSTERING_FACTOR也加一

所以clustering_factor可以描述数据在表中的散布方式

如果clustering_factor接近表中的行数,大多行都不在同一个块中,分布太散

当clustering_factor接近表中的块数,说明数据集中有序

当用INDEX 获取一行以上数据时(INDEX RANGE SCAN),需要遍历INDEX的一部分 叫INDEX的 X%,扫描INDEX 时必须逐行的读取表,那么当遍历INDEX 的 X%时,转换表块的次数就等于clustering_factor 的 X%

另外clustering_factor对于oracle 优化器计算index cost 有直接关系

cost =

blevel +

ceiling(leaf_blocks * effective index selectivity) +

ceiling(clustering_factor * effective table selectivity)

今天读troubleshooting oracle performance 找到一个直接获取clusering_factor的函数脚本特此记录,仔细看可以发现 计算方式与上面的理论是一样的

SQL> show user

USER is "XH"

SQL> create table t3 (a int ,b int);

Table created.

SQL> declare

2  begin

3  for i in 1..10000 loop

4  insert into t3 values(i,i+1);

5  end loop;

6  commit;

7  end;

8  /

PL/SQL procedure successfully completed.

SQL> create index t3_ind on t3(a);

Index created.

SQL> select clustering_factor from user_ind_statistics where index_name='T3_IND';

CLUSTERING_FACTOR

-----------------

18

SQL> CREATE OR REPLACE FUNCTION clustering_factor (

2    p_owner IN VARCHAR2,

3    p_table_name IN VARCHAR2,

4    p_column_name IN VARCHAR2

5  ) RETURN NUMBER IS

6    l_cursor             SYS_REFCURSOR;

7    l_clustering_factor  BINARY_INTEGER := 0;

8    l_block_nr           BINARY_INTEGER := 0;

9    l_previous_block_nr  BINARY_INTEGER := 0;

10    l_file_nr            BINARY_INTEGER := 0;

11    l_previous_file_nr   BINARY_INTEGER := 0;

12  BEGIN

13    OPEN l_cursor FOR

14      'SELECT dbms_rowid.rowid_block_number(rowid) block_nr, '||

15      '       dbms_rowid.rowid_to_absolute_fno(rowid, '''||

16                                               p_owner||''','''||

17                                               p_table_name||''') file_nr '||

18      'FROM '||p_owner||'.'||p_table_name||' '||

19      'WHERE '||p_column_name||' IS NOT NULL '||

20      'ORDER BY ' || p_column_name;

21    LOOP

FETCH l_cursor INTO l_block_nr, l_file_nr;

22   23      EXIT WHEN l_cursor%NOTFOUND;

24      IF (l_previous_block_nr <> l_block_nr OR l_previous_file_nr <> l_file_nr)

25      THEN

26        l_clustering_factor := l_clustering_factor + 1;

27      END IF;

28      l_previous_block_nr := l_block_nr;

29      l_previous_file_nr := l_file_nr;

30    END LOOP;

31    CLOSE l_cursor;

32    RETURN l_clustering_factor;

33  END;

34  /

Function created.

SQL> select clustering_factor('XH','T3','A') from dual;

CLUSTERING_FACTOR('XH','T3','A')

--------------------------------

18

oracle loop index,oracle index 聚集因子相关推荐

  1. oracle 索引invisible,Oracle index unusable和invisible的区别

    invisible index会被优化器所忽略,但是dml操作仍然会维护索引.在session或者system级别使用参数OPTIMIZER_USE_INVISIBLE_INDEX 摘录自Oracle ...

  2. oracle12178错误,Oracle学习笔记_20080522:Index FS vs Index FFS

    Index Full Scan vs Index Fast Full Scan index full scan和index fast full scan是指同样的东西吗?答案是no.两者虽然从字面上看 ...

  3. ORACLE虚拟索引(Virtual Index)

    ORACLE虚拟索引(Virtual Index)   虚拟索引概念 虚拟索引(Virtual Indexes)是一个定义在数据字典中的假索引(fake index),它没有相关的索引段.虚拟索引的目 ...

  4. oracle rebuild online,alter index rebuild

    Oracle alter index rebuild 说明[日期:2011-06-12]来源:Linux社区 作者:tianlesoftware[字体:大中小] 一.官网说明 在MOS 上的一篇文章讲 ...

  5. oracle中alter index,oracle alter index rebuild online和alter index rebuild的區別

    本文用10046事件來解析alter index rebuild與alter index rebuild online的區別 alter index rebuild online實質上是掃描表而不是掃 ...

  6. oracle rebuild online,Oracle index rebuild online 与 rebuild 及 drop index 后重建

    当我们对索引进行 rebuild 时,如果不加online选项,oracle则直接读取原索引的数据; 当我们添加 online 选项时,oracle是直接扫描表中的数据,维护索引段数据的一致性就是从索 ...

  7. oracle rebuild online,ORACLE alter index rebuild online 操作产生的锁

    ORACLE通过锁和闩的方式实现了并发控制,v$lock 视图列出了数据库中当前拥有的锁以及未完成的锁请求.当发觉有session处于等待事件时 ,可以通过v$lock查询信息. v$lock中的常用 ...

  8. Oracle学习笔记 --- Oracle ORA错误解决方案

    今天在Debug的时候报错了如下信息: 后来综合了网上的东西,总结如下: ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-000 ...

  9. oracle 快速上手,Oracle学习笔记:快速上手

    开启服务:先开启Lisenterner服务 再开启ORCL服务 oracle登录 用户: - 管理员 sysDBA - 无密码 - 系统用户 system - manager - 普通用户 scott ...

最新文章

  1. 基于java的学生点名系统_基于javafx的学生电子点名系统(在eclipse中编写完成)...
  2. sql截取字符串并把字符串插入到表中的存储过程
  3. C6748_UART(5) - UART寄存器
  4. LeetCode(461)——汉明距离(JavaScript)
  5. Mac系统升级node
  6. SpringCloud之良心入门干货(Eureka入门)
  7. 如果从零开始开发一款APP,需要做哪些准备
  8. 从源码的角度分析ViewGruop的事件分发
  9. 破解ACCESS(2000) .mdb格式文件密码手记
  10. windows配置cmder
  11. 楼天成,ACRush
  12. 物联网技术概论:第2章
  13. 网站被挂马的解决方案
  14. NepCTF2022
  15. 【python】耗时统计小程序
  16. UOJ #11. 【UTR #1】ydc的大树
  17. 导入不在是用mysqldump 而是用mysql -u xxx -p /home/aa.sql
  18. 【环境配置】gazebo搭建仿真机器人研究动态障碍物算法
  19. Java代码清除Word文档的批注和修订 (Aspose.Words) Java老铁们,亲测有效!
  20. 互联网日报 | 贾跃亭乐视网股票流拍;东航组建“三亚国际航空”;苹果线上WWDC大会22日举办...

热门文章

  1. 2021年中宁中学高考成绩查询,2021宁夏中卫市重点高中排名
  2. linux错误代码0x8008005,利用Windows10自带Linux学习(附带:0x8007019e错误解决方法)...
  3. linux卸载gd,linux下 安装GD
  4. 高斯粒子滤波matlab,粒子滤波(Particle filter)matlab实现 | 学步园
  5. mysql在linux只有用空密码_在Linux服务器上配置phpMyAdmin--允许空密码
  6. Android 仿王者荣耀广告弹窗,android仿王者荣耀对战资料之能力图
  7. mysql int 优化_MySQL数据类型优化—整数类型优化选择
  8. 数学--数论--鸽巢原理
  9. FCOS 基于FPN之上的完全Anchor Free检测框架
  10. 【ubuntu-version】 几种常见工具查看版本的命令