Oracle学习----集群因子(Clustering Factor)
SQL> select rowid from t;
ROWID
------------------
AAASEzAAEAAAAFFAAA
SQL> select length(rowid) from t;
LENGTH(ROWID)
-------------
18
rowid一共18位
最前面6位表示data object number
之后后3位表示datafile number
之后后6位表示datablock number
最后面3位表示row number
3.如何根据rowid查询出来相应的块号等信息?
SQL> select
2 rowid,
3 dbms_rowid.rowid_relative_fno(rowid) rel_fno,--返回rowid对应的文件号
4 dbms_rowid.rowid_block_number(rowid) blockno,--返回rowid所在的块号
5 dbms_rowid.rowid_row_number(rowid) rowno--返回该行数据在block中的相对位置
6 from t where rownum=1;
ROWID REL_FNO BLOCKNO ROWNO
------------------------ ------------- ------------- -------
AAASEzAAEAAAAFFAAA 4 325 0
4.能改集群因子吗?重建索引会改变集群因子吗?
不会,索引是根据创建时列的值排序创建的,只能create table .. order by 索引列,才能改变集群因子。
5.集群因子是如何影响性能的?
假设一个表有1千万行,只需要返回1w行数据,走索引。
select * from t where rowid<=10000;
走索引要先返回10000个rowid,回表要回10000次
SQL> create table test as select * from dba_objects;
表已创建。
SQL> create index objid on test(object_id);
索引已创建。
SQL> select index_name,clustering_factor from user_indexes where table_name='TEST';
INDEX_NAME CLUSTERING_FACTOR
------------------------------------------------------------ -----------------
OBJID 1085
SQL> select count(distinct dbms_rowid.rowid_block_number(rowid))from test;
COUNT(DISTINCTDBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID))
---------------------------------------------------
1027
SQL> select count(*) from test;
COUNT(*)
----------
72063
反转建立索引
SQL> alter index objid rebuild reverse;
索引已更改。
SQL> select index_name,clustering_factor from user_indexes where table_name='TEST';
INDEX_NAME CLUSTERING_FACTOR
------------------------------------------------------------ -----------------
OBJID 72061
SQL> select count(*) from test;
COUNT(*)
----------
72063
SQL> select count(distinct dbms_rowid.rowid_block_number(rowid))from test;
COUNT(DISTINCTDBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID))
---------------------------------------------------
1027
9.sql实现集群因子的算法
WITH T AS
(SELECT OWNER COLUMN_NAME,
LEAD(OWNER, 1, OWNER) OVER(ORDER BY OWNER) NEXT_COLUMN_NAME,
ROWID ROWID_NUM,
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) BLOCK_ID,
LEAD(ROWID) OVER(ORDER BY OWNER) NEXT_ROWID_NUM,
LEAD(DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID),
1,
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)) OVER(ORDER BY OWNER) NEXT_BLOCK_ID
FROM TEST A
WHERE OWNER IS NOT NULL
ORDER BY OWNER)
SELECT COUNT(*) 记录数,COUNT(DISTINCT BLOCK_ID) BLOCK_ID_SUM,
SUM(CASE
WHEN T.BLOCK_ID = T.NEXT_BLOCK_ID THEN
0
ELSE
1
END) + 1 集群因子,
SUM(CASE
WHEN T.COLUMN_NAME = T.NEXT_COLUMN_NAME AND
T.BLOCK_ID <> T.NEXT_BLOCK_ID THEN
1
ELSE
0
END) 值同_块不同
FROM T;
Oracle学习----集群因子(Clustering Factor)的更多相关文章
- 集群因子(Clustering Factor)
clustering factor是CBO使用的统计信息,用来衡量一个表中的列是否是规则排序存放的. 在通过索引访问表的时候,被用来作为代价评估的指示器.扫描索引的时候,clustering fact ...
- Oracle Index Clustering Factor(集群因子)
一.本文说明: 今天在做测试的时候发现字段上有索引,但是执行计划就是不走索引,经过在网上查找才发现原来是索引的集群因子过高导致的.本文属于转载 二.官网说明 The index clustering ...
- 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...
- Clustering Factor——索引的成本指标
使用索引是我们面对海量数据搜索是一种常用的手段.通过有效的索引访问,可以使我们更快的访问到需要的数据,减少物理.逻辑IO,从而提高系统性能.在CBO时代,Oracle对于提交SQL的执行路径是有所选择 ...
- 【转】【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
原文地址:http://www.cnblogs.com/baiboy/p/orc8.html 阅读目录 目录 数据库安装 参考文献 相关文章 Oracle 11G RAC数据库安装(八) 概述:写 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Oracle学习线路
出自huyangg的博客,地址是:oracle学习路线图 1.sql.pl/sql(网上有很多的视频,可以做一个简单的入手,然后看几本书,多做实验) 作为oracle的基本功,需要大家对sql和 ...
- Oracle学习指南
Oracle学习指南 你走的那天,我决定不落泪,迎着风撑着眼帘用力不眨眼 创建数据库.创建用户.创建表空间.创建表.插入数据..... 1.用系统用户登录,任选系统用户 代码: >>sql ...
- Oracle rac集群环境中的特殊问题
备注:本文摘抄于张晓明<大话Oracle RAC:集群 高可用性 备份与恢复> 因为集群环境需要多个计算机协同工作,要达到理想状态,必须要考虑在集群环境下面临的新挑战. 1.并发控制 在集 ...
随机推荐
- App小样在手机运行了一下
外包公司把App小样的安装包发过来了,我在安卓手机上试了一把,虽然还只有几个静态页面,但安装那一刻还是小激动了一把. 在某美术系MM的帮助下,我基本掌握了原型软件azure. 事实证明,很多东西都是逼 ...
- Word Puzzles
poj1204:http://poj.org/problem?id=1204 题意:给你n*m的字符串矩阵,然后p个查询,每个查询会给出一个字符串,然后问你在矩阵中能否通过8个方向搜索到这个字符串,输 ...
- PHP 切割字符串 点号 不用双斜杠
$name = "tupian.png"; $nameArr = explode(".", $name); 习惯了Java的程序员容易写成 $nameArr = ...
- 创建支持CRUD(增删改查)操作的Web API(二)
一:准备工作 你可以直接下载源码查看 Download the completed project. 下载完整的项目 CRUD是指“创建(C).读取(R).更新(U)和删除(D)”,它们是四个 ...
- OA学习笔记-004-Spring2.5配置
一.jar包 (1)spring.jar (2)Aop包 aspectjrt.jaraspectjweaver.jar (3)动态代理 cglib-nodep-2.1_3.jar (4)日志 comm ...
- git推送本地分支到远端 以及删除远端分支的 命令
git推送本地分支到远端 当前处于master分支,尝试用了git push origin warning: push.default is unset; its implicit value is ...
- awk将普通文本转换成json文件
script1: #!/bin/bash #Date:-- #Author:eivll0m awk -F"\t" -vq='"' '{ a[$]=a[$]?a[$]:$ ...
- sort()函数与qsort()函数及其头文件
sort()函数与qsort()函数及其头文件 sort()函数是C++中的排序函数其头文件为:#include<algorithm>头文件: qsort()是C中的排序函数,其头文件为: ...
- 仿建行JS键盘
一款比较好用的JS密码输入脚本,效果图如下: 代码如下: <html> <head> <script> /*js文件*/ window.onload=functio ...
- Tomcat启动失败闪退
最近把电脑系统从win8升到了8.1(之前源于各种原因都没升外带升级失败),用都用了1个月了,突然发现tomcat启动不了,提示找不到什么什么- -,因为平时基本都是从开发工具里运行的服务器,都没有问 ...