--聚合因子试验准备:
--分别建两张有序和无序的表
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
统计信息
----