首页 > 其他分享 >20.集群因子(Clustering Factor)

20.集群因子(Clustering Factor)

时间:2023-08-27 20:56:03浏览次数:42  
标签:Clustering 20 扫描 回表 索引 集群 Factor

集群因子用于判断索引回表需要消耗的物理I/O次数。

这里在测试表test上创建一个索引:

create index idx_id on test(object_id);
select owner, index_name, clustering_factor  from dba_indexes where owner = 'TEST' and index_name = 'IDX_ID';

结果展示:

OWNER                INDEX_NAME           CLUSTERING_FACTOR
-------------------- -------------------- -----------------
TEST                 IDX_ID                            1597

索引idx_id的叶子块中有序地存储了索引的键值以及键值对应所在的Rowid.

SQL> select * from (select object_id, rowid  from test  where object_id is not null order by object_id) where rownum<=5;

 OBJECT_ID ROWID
---------- ------------------
         2 AAASACAAFAAAA0TAAi
         3 AAASACAAFAAAA0TAAJ
         4 AAASACAAFAAAA0TAAh
         5 AAASACAAFAAAA0TAAk
         6 AAASACAAFAAAA0TAAK

  首先我们比较 2、3 对应的 ROWID 是否在同一个数据块,如果在同一个数据块,Clustering Factor +0;如果不在同一个数据块,那么 Clustering Factor 值加 1。 然后我们比较 3、4 对应的 ROWID 是否在同一个数据块,如果在同一个数据块,Clustering Factor 值不变;如果不在同一个数据块,那么 Clustering Factor 值加 1。 接下来我们比较4、5对应的ROWID是否在同一个数据块,如果在同一个数据块,Clustering Factor +0;如果不在同一个数据块,那么 Clustering Factor 值加 1。 像上面步骤一样,一直这样有序地比较下去,直到比较完索引中最后一个键值。

   根据算法我们知道集群因子介于表的块数和表行数之间。 如果集群因子与块数接近,说明表的数据基本上是有序的,而且其顺序基本与索引顺序一 样。这样在进行索引范围或者索引全扫描的时候,回表只需要读取少量的数据块就能完成。 如果集群因子与表记录数接近,说明表的数据和索引顺序差异很大,在进行索引范围扫描 或者索引全扫描的时候,回表会读取更多的数据块。 集群因子只会影响索引范围扫描(INDEX RANGE SCAN)以及索引全扫描(INDEX FULL SCAN),因为只有这两种索引扫描方式会有大量数据回表。 集群因子不会影响索引唯一扫描(INDEX UNIQUE SCAN),因为索引唯一扫描只返回一 条数据。集群因子更不会影响索引快速全扫描(INDEX FAST FULL SCAN),因为索引快速全扫描不回表

查看一下表的总块数

SQL> select count(distinct dbms_rowid.rowid_block_number(rowid)) blocks from test.test;

    BLOCKS
----------
      1411

  再次强调一遍,在进行 SQL 优化的时候,往往会建立合适的组合索引消除回表,或者建 立组合索引尽量减少回表次数。如果无法避免回表,怎么做才能消除回表对 SQL 查询性能产生影响呢?当我们把表中所 有的数据块缓存在 buffer cache 中,这个时候不管集群因子多大,对 SQL 查询性能也没有多大 影响,因为这时不需要物理 I/O,数据块全在内存中访问速度是非常快的。

标签:Clustering,20,扫描,回表,索引,集群,Factor
From: https://www.cnblogs.com/zmc60/p/17660795.html

相关文章

  • ICCV 2023 | 通过可靠、多样和类平衡的伪标签重新审视跨域三维目标检测
    前言 本文介绍了ICCV2023被接收的文章RevisitingDomain-Adaptive3DObjectDetectionbyReliable,DiverseandClass-balancedPseudo-Labeling的介绍。这个工作通过生成可靠、多样且类别平衡的伪3D物体,实现了单模型多类别同时自训练,从而将检测器自适应到目标域的三维......
  • NC20909 游戏
    题目链接题目题目描述有n个人围成一个环玩传球游戏,每轮游戏手里拿着球的那个人必须将球传给他(她)的一个朋友。游戏一共进行了m轮,初始球在第a个人手中,问游戏结束后球在第b个人手中的方案数。多组测试数据。答案对10^9+7取模。输入描述第一行三个整数Q,n,m(1≤Q≤1......
  • [极客大挑战 2019]PHP
    [极客大挑战2019]PHP打开链接,提示有备份网站的习惯![image-20230821164500785](../../../../../../Typora文章/[极客大挑战2019]PHP/image-20230821164500785.png)因此此时尝试访问一些常见的网站备份文件名,例如:常见网站源码备份文件后缀:tar.gz zip rar tar常见网站源......
  • The 2022 ICPC Asia Xian Regional Contest
    链接C.CloneRanran题意:一个人要准备一场比赛,需要出c道题,他现在可以选择两种操作:1.花费a分钟自我复制一次。(复制的自己也可以接着复制)2.花费b分钟出一道题。问最短要多少分钟可以准备c道题。思路:枚举自我复制的次数,挨个判断就行。#include<bits/stdc++.h>usingnamespaces......
  • NOIP2013提高组初赛易错题解析
    7. 正解:可以画出递归树,画出后应该是这样子的 画出递归树,就可以得出答案时间复杂度为O(Fn) 15. 正解:2T(n/2)=O(logn)T(n)=2*T(n/2)+2*n=O(nlogn)三.2. 错误原因:蒙的正解:通过观察,可以找到递推关系式,f[n]=1/n*(n+f[1]+f[2]+...+f[n]),f[1]=0,f[2]=2,经过计算......
  • Python+Requests示例记录【2023-08-27】
    importrequestsimportjsonpayload={"userNo":"用户","password":"密码"}response=requests.post(url,json=payload)print(response)print('---------------------------')print(response.status_code)print('......
  • NOIP2017提高组初赛易错题解析
     8.由四个不同的点构成的简单无向连通图的个数是()A.32 B.35 C.38 D.41错误原因:数重了正解:分情况计算,6条边的有1种,5条边的有C(6,1)=6种,4条边的有C(6,4)=15种,3条边,要分度数,2+2+1+1的有12种,3+1+1+1的有4种,共38种 10.若 f0​=0,f1​=1,fn+1​=(fn​+fn−1)/2​​,则随着......
  • NOIP2016提高组初赛易错题解析
    9. 正解:每一个bit,都有两种可能,0和1,所以最多可以使用232=4GB的内存 14. 正解:使用代入法,T(n)=2T(n/4)+sqrt(n),T(n/16)=2T(n/4/4/4)+1/4*sqrt(n),T(n)=2k+k*sqrt(n)=sqrt(n)+k*sqrt(n),则时间复杂度为O(sqrt(n)logn) 二.1. 正解:前三个都是无线通信技术,以太网是有......
  • NOIP2018提高组初赛易错题解析
    2.下列属于解释执行的程序设计语言是()A.C B.C++ C.Pascal D.Python错误原因:忘记了正解:C、C++和Pascal都是编译性语言,而Python是解释性语言 5.设某算法的时间复杂度函数的递推方程是 T(n)=T(n-1)+n(n 为正整数)及 T(0)=1,则该算法的时间复杂度为()A.O(logn) ......
  • CSP-J2022初赛易错题解析
    7.假设字母表{a,b,c,d,e}在字符串出现的频率分别为10%,15%,30%,16%,29%。若使用哈夫曼编码方式对字母进行不定长的二进制编码,字母d的编码长度()位。A.1  B.2 C.2或3  D.3正解:画出哈夫曼树即可9.考虑由N个顶点构成的有向连通图,采用邻接矩阵的数据结构表示时,该矩阵中至......