一、测试数据准备
新建2张测试数据表,一张为聚集主键,一张为非聚集主键
create table td_pk(id int cluster primary key,name varchar2(20));
create table td(id int primary key,name varchar2(20));
插入1000万条测试数据
insert into td_pk select level,to_char(level)||‘black’ from dual connect by level <=10000000;
commit;
insert into td select level,to_char(level)||‘black’ from dual connect by level <=10000000;
commit;
二、更新表的统计信息
DBMS_STATS.GATHER_TABLE_STATS(‘SYSDBA’,‘td_pk’,null,100,TRUE,‘FOR ALL COLUMNS SIZE AUTO’);
DBMS_STATS.GATHER_TABLE_STATS(‘SYSDBA’,‘td’,null,100,TRUE,‘FOR ALL COLUMNS SIZE AUTO’);
三、查询数据
查询聚集主键表的name字段
select name from td_pk where id < 20;
查询非聚集主键表的name字段
select name from td where id < 20;
查询聚集主键表的id字段
查询非聚集主键表的id字段
从上述查询中可以看出,当聚集主键作为筛选条件时时,查询非主键字段数据,查询性能会比使用非聚集主键作为筛选条件时更优;查询主键字段数据,使用聚集主键或者非聚集主键作为筛选条件,查询性能基本持平。
注:因测试数据的复杂程度不同,测试结果可能会有变化,以上结果仅供参考。
文章
阅读量
获赞