oracle loop index,oracle index 聚集因子
简单看一下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 聚集因子相关推荐
- oracle 索引invisible,Oracle index unusable和invisible的区别
invisible index会被优化器所忽略,但是dml操作仍然会维护索引.在session或者system级别使用参数OPTIMIZER_USE_INVISIBLE_INDEX 摘录自Oracle ...
- oracle12178错误,Oracle学习笔记_20080522:Index FS vs Index FFS
Index Full Scan vs Index Fast Full Scan index full scan和index fast full scan是指同样的东西吗?答案是no.两者虽然从字面上看 ...
- ORACLE虚拟索引(Virtual Index)
ORACLE虚拟索引(Virtual Index) 虚拟索引概念 虚拟索引(Virtual Indexes)是一个定义在数据字典中的假索引(fake index),它没有相关的索引段.虚拟索引的目 ...
- oracle rebuild online,alter index rebuild
Oracle alter index rebuild 说明[日期:2011-06-12]来源:Linux社区 作者:tianlesoftware[字体:大中小] 一.官网说明 在MOS 上的一篇文章讲 ...
- oracle中alter index,oracle alter index rebuild online和alter index rebuild的區別
本文用10046事件來解析alter index rebuild與alter index rebuild online的區別 alter index rebuild online實質上是掃描表而不是掃 ...
- oracle rebuild online,Oracle index rebuild online 与 rebuild 及 drop index 后重建
当我们对索引进行 rebuild 时,如果不加online选项,oracle则直接读取原索引的数据; 当我们添加 online 选项时,oracle是直接扫描表中的数据,维护索引段数据的一致性就是从索 ...
- oracle rebuild online,ORACLE alter index rebuild online 操作产生的锁
ORACLE通过锁和闩的方式实现了并发控制,v$lock 视图列出了数据库中当前拥有的锁以及未完成的锁请求.当发觉有session处于等待事件时 ,可以通过v$lock查询信息. v$lock中的常用 ...
- Oracle学习笔记 --- Oracle ORA错误解决方案
今天在Debug的时候报错了如下信息: 后来综合了网上的东西,总结如下: ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常. ORA-000 ...
- oracle 快速上手,Oracle学习笔记:快速上手
开启服务:先开启Lisenterner服务 再开启ORCL服务 oracle登录 用户: - 管理员 sysDBA - 无密码 - 系统用户 system - manager - 普通用户 scott ...
最新文章
- 基于java的学生点名系统_基于javafx的学生电子点名系统(在eclipse中编写完成)...
- sql截取字符串并把字符串插入到表中的存储过程
- C6748_UART(5) - UART寄存器
- LeetCode(461)——汉明距离(JavaScript)
- Mac系统升级node
- SpringCloud之良心入门干货(Eureka入门)
- 如果从零开始开发一款APP,需要做哪些准备
- 从源码的角度分析ViewGruop的事件分发
- 破解ACCESS(2000) .mdb格式文件密码手记
- windows配置cmder
- 楼天成,ACRush
- 物联网技术概论:第2章
- 网站被挂马的解决方案
- NepCTF2022
- 【python】耗时统计小程序
- UOJ #11. 【UTR #1】ydc的大树
- 导入不在是用mysqldump 而是用mysql -u xxx -p /home/aa.sql
- 【环境配置】gazebo搭建仿真机器人研究动态障碍物算法
- Java代码清除Word文档的批注和修订 (Aspose.Words) Java老铁们,亲测有效!
- 互联网日报 | 贾跃亭乐视网股票流拍;东航组建“三亚国际航空”;苹果线上WWDC大会22日举办...
热门文章
- 2021年中宁中学高考成绩查询,2021宁夏中卫市重点高中排名
- linux错误代码0x8008005,利用Windows10自带Linux学习(附带:0x8007019e错误解决方法)...
- linux卸载gd,linux下 安装GD
- 高斯粒子滤波matlab,粒子滤波(Particle filter)matlab实现 | 学步园
- mysql在linux只有用空密码_在Linux服务器上配置phpMyAdmin--允许空密码
- Android 仿王者荣耀广告弹窗,android仿王者荣耀对战资料之能力图
- mysql int 优化_MySQL数据类型优化—整数类型优化选择
- 数学--数论--鸽巢原理
- FCOS 基于FPN之上的完全Anchor Free检测框架
- 【ubuntu-version】 几种常见工具查看版本的命令