`

Oralce 索引聚簇因子

 
阅读更多
--聚合因子试验准备:

--分别建两张有序和无序的表
CREATE TABLE T_COLOCATED ( ID NUMBER, COL2 VARCHAR2(100) );
BEGIN
        FOR I IN 1 .. 100000
        LOOP
            INSERT INTO T_COLOCATED(ID,COL2)
            VALUES (I, RPAD(DBMS_RANDOM.RANDOM,95,'*') );
        END LOOP;
END;
/

ALTER TABLE T_COLOCATED ADD CONSTRAINT PK_T_COLOCATED PRIMARY KEY(ID);

CREATE TABLE T_DISORGANIZED
     AS
    SELECT ID,COL2
    FROM T_COLOCATED
    ORDER BY COL2;

ALTER TABLE T_DISORGANIZED ADD CONSTRAINT PK_T_DISORG PRIMARY KEY (ID);


--分别分析两张表的聚合因子层度
                                                         
SELECT INDEX_NAME,                                                         
              BLEVEL,                                                          
              LEAF_BLOCKS,                                                     
              NUM_ROWS,                                                        
              DISTINCT_KEYS,                                                   
              CLUSTERING_FACTOR                                                
         FROM USER_IND_STATISTICS                                              
        WHERE TABLE_NAME IN( 'T_COLOCATED','T_DISORGANIZED');    


INDEX_NAME                         BLEVEL LEAF_BLOCKS   NUM_ROWS DISTINCT_KEYS CLUSTERING_FACTOR
------------------------------ ---------- ----------- ---------- ------------- -----------------
PK_T_COLOCATED                          1         208     100000        100000              1469
PK_T_DISORG                             1         208     100000        100000             99932
--首先观察有序表的查询性能



执行并比较性能差异
select /*+index(t)*/ * from  t_colocated t  where id>=20000 and id<=40000;

执行计划
----------------------------------------------------------
Plan hash value: 4204525375

----------------------------------------------------------------------------------------------
| Id  | Operation                   | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                | 21104 |  1339K|   389   (1)| 00:00:05 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T_COLOCATED    | 21104 |  1339K|   389   (1)| 00:00:05 |
|*  2 |   INDEX RANGE SCAN          | PK_T_COLOCATED | 21104 |       |    53   (2)| 00:00:01 |
----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("ID">=20000 AND "ID"<=40000)

Note
-----
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       2986  consistent gets
          0  physical reads
          0  redo size
    2293678  bytes sent via SQL*Net to client
      15048  bytes received via SQL*Net from client
       1335  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      20001  rows processed

再观察无序表的查询性能
select /*+index(t)*/ * from  t_disorganized t  where id>=20000 and id<=40000;

已用时间:  00: 00: 09.75

执行计划
----------------------------------------------------------
Plan hash value: 4204525375

----------------------------------------------------------------------------------------------
| Id  | Operation                   | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |                | 21104 |  1339K|   389   (1)| 00:00:05 |
|   1 |  TABLE ACCESS BY INDEX ROWID| T_COLOCATED    | 21104 |  1339K|   389   (1)| 00:00:05 |
|*  2 |   INDEX RANGE SCAN          | PK_T_COLOCATED | 21104 |       |    53   (2)| 00:00:01 |
----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("ID">=20000 AND "ID"<=40000)

Note
-----
   - dynamic sampling used for this statement


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       2986  consistent gets
          0  physical reads
          0  redo size
    2293678  bytes sent via SQL*Net to client
      15048  bytes received via SQL*Net from client
       1335  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      20001  rows processed

--Oracle文档对聚簇因子的解释
Indicates the amount of order of the rows in the table based on the values of the index.
If the value is near the number of blocks, then the table is very well ordered. In this case, the index entries in a single leaf block tend to point to rows in the same data blocks.
If the value is near the number of rows, then the table is very randomly ordered. In this case, it is unlikely that index entries in the same leaf block point to rows in the same data blocks.

 

分享到:
评论

相关推荐

    oracle索引说明.pdf

    如果聚簇因子差,意味着索引中的键值顺序与数据行的物理顺序不匹配,这可能会影响索引的效率。在某些情况下,可能需要重建索引来改善聚簇因子,以提高查询性能。 5. 更新操作与性能: 由于数据库的更新操作通常...

    数据库 创建索引 sql oracle

    "数据库创建索引SQL Oracle" 数据库索引是数据库性能优化的重要手段之一。创建索引可以提高查询速度,降低数据库的负载,提高数据的安全性。本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面...

    09 oracle的索引 PPT

    2. 聚集因子(Cluster Factor):衡量索引的碎片程度,值越小表示索引越聚集,性能越好。 3. 使用EXPLAIN PLAN分析查询:Oracle的EXPLAIN PLAN功能可以帮助分析查询计划,了解是否使用了索引以及其效果。 四、索引...

    Cost-Based.Oracle.Fundamentals

    一个较低的聚簇因子意味着索引记录与其对应的数据行在磁盘上是相邻或接近的,这样在通过索引查找数据时,访问的数据块数量就会减少,从而提高查询性能。 然而,仅仅看聚簇因子的数值是没有意义的,必须将其与表中的...

    影响Oracle数据库索引的几个因素浅析.pdf

    聚簇索引是将数据表中的记录按照索引键排序后的结果,而非聚簇索引是将索引键和实际数据存储在不同的表中。 二、索引的作用 索引的主要作用是提高查询表中的记录速度。它可以减少查询所需的时间和资源。索引可以...

    oracle索引说明[参照].pdf

    当索引的层数增加、聚簇因子差(实际数据分布与索引顺序不一致)或者删除的索引空间未被重用时,可能需要对索引进行重建以保持其效率。 索引的基础操作是一个更新由一个删除和一个插入组成,这意味着每次数据更改,...

    Oracle索引质量介绍和分析脚本分享

    例如,"Poor"级别的索引聚簇因子较大,意味着索引没有很好地聚集数据,这可能是因为频繁的DML操作导致数据分布不均或者索引列的选择不当。 分析索引质量的一种方法是查询Oracle的数据字典视图,例如`DBA_INDEXES`、...

    Oracle Index Internals.pdf

    - **Oracle索引误区总结**:列出了一些常见的误解,例如索引会变得不平衡或高聚簇因子意味着需要重建索引等,并解释了这些误区为何不正确。 - **何时考虑创建索引**:讨论了在何种情况下创建索引是合理的。 #### ...

    oracle索引说明

    - **索引重建需求**:当索引的聚簇因子变差或者层级增加时,可能需要重建索引来优化性能。 - **性能优化**:为了保持索引的有效性,有时需要定期重建索引。这通常发生在索引使用频繁或数据量大时。 #### 索引的基础...

    关于ORACLE数据库中索引的几点讨论.pdf

    - **CF(聚簇因子)**:它反映了每个索引块对应的平均数据块数。如果索引项在数据块中的分布很均匀,CF值较低,反之则较高。较高的CF意味着使用索引可能需要读取更多的数据块。 - **FF(过滤因子)**:这是选择...

    《Oracle DBA手记——数据库诊断案例与性能优化实践》第一章 to be continued

    ├─第一篇 DBA工作手记 │ 01.Eygle的DBA工作手记 │ 02.Yangtingkun的DBA工作手记 │ 03.老熊的DBA手记 │ 04.BanPing的DBA工作...聚簇因子、柱状图与执行计划 04.表碎片及分页查询优化 05.一次排序的调整与优化

    影响Oracle查询效率的部分因素研究.pdf

    此外,索引的聚簇因子(CF)和过滤因子(FF)是评估索引使用成本的关键指标。当CF增大,表示索引和表记录之间的对应关系变差,可能需要重新组织索引。FF则是Oracle基于统计信息预测查询需要读取的数据块数量。 总的来说...

Global site tag (gtag.js) - Google Analytics