oracle 修改聚簇因子,Oralce索引聚簇因子

本文通过创建有序和无序两张表进行SQL查询性能对比实验,分析了聚簇因子对查询性能的影响。实验证明,有序表相较于无序表在相同查询条件下表现出更好的查询性能。

Sql代码

--聚合因子试验准备:

--分别建两张有序和无序的表

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文档对聚簇因子的解释

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值