--聚合因子试验准备: --分别建两张有序和无序的表 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.
相关推荐
如果聚簇因子差,意味着索引中的键值顺序与数据行的物理顺序不匹配,这可能会影响索引的效率。在某些情况下,可能需要重建索引来改善聚簇因子,以提高查询性能。 5. 更新操作与性能: 由于数据库的更新操作通常...
"数据库创建索引SQL Oracle" 数据库索引是数据库性能优化的重要手段之一。创建索引可以提高查询速度,降低数据库的负载,提高数据的安全性。本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面...
2. 聚集因子(Cluster Factor):衡量索引的碎片程度,值越小表示索引越聚集,性能越好。 3. 使用EXPLAIN PLAN分析查询:Oracle的EXPLAIN PLAN功能可以帮助分析查询计划,了解是否使用了索引以及其效果。 四、索引...
一个较低的聚簇因子意味着索引记录与其对应的数据行在磁盘上是相邻或接近的,这样在通过索引查找数据时,访问的数据块数量就会减少,从而提高查询性能。 然而,仅仅看聚簇因子的数值是没有意义的,必须将其与表中的...
聚簇索引是将数据表中的记录按照索引键排序后的结果,而非聚簇索引是将索引键和实际数据存储在不同的表中。 二、索引的作用 索引的主要作用是提高查询表中的记录速度。它可以减少查询所需的时间和资源。索引可以...
当索引的层数增加、聚簇因子差(实际数据分布与索引顺序不一致)或者删除的索引空间未被重用时,可能需要对索引进行重建以保持其效率。 索引的基础操作是一个更新由一个删除和一个插入组成,这意味着每次数据更改,...
例如,"Poor"级别的索引聚簇因子较大,意味着索引没有很好地聚集数据,这可能是因为频繁的DML操作导致数据分布不均或者索引列的选择不当。 分析索引质量的一种方法是查询Oracle的数据字典视图,例如`DBA_INDEXES`、...
- **Oracle索引误区总结**:列出了一些常见的误解,例如索引会变得不平衡或高聚簇因子意味着需要重建索引等,并解释了这些误区为何不正确。 - **何时考虑创建索引**:讨论了在何种情况下创建索引是合理的。 #### ...
- **索引重建需求**:当索引的聚簇因子变差或者层级增加时,可能需要重建索引来优化性能。 - **性能优化**:为了保持索引的有效性,有时需要定期重建索引。这通常发生在索引使用频繁或数据量大时。 #### 索引的基础...
- **CF(聚簇因子)**:它反映了每个索引块对应的平均数据块数。如果索引项在数据块中的分布很均匀,CF值较低,反之则较高。较高的CF意味着使用索引可能需要读取更多的数据块。 - **FF(过滤因子)**:这是选择...
├─第一篇 DBA工作手记 │ 01.Eygle的DBA工作手记 │ 02.Yangtingkun的DBA工作手记 │ 03.老熊的DBA手记 │ 04.BanPing的DBA工作...聚簇因子、柱状图与执行计划 04.表碎片及分页查询优化 05.一次排序的调整与优化
此外,索引的聚簇因子(CF)和过滤因子(FF)是评估索引使用成本的关键指标。当CF增大,表示索引和表记录之间的对应关系变差,可能需要重新组织索引。FF则是Oracle基于统计信息预测查询需要读取的数据块数量。 总的来说...