count(*)在平常工作中,使用到的频率很高,是否会走索引,对性能影响不小!但是不是所有的count(*)都能走索引!小记下

wKioL1PXF7uA9IREAAG9ypKq6m0823.jpg

create table t3


(


sid number not null primary key,


sno number,


sname varchar2(10)


)


tablespace test;


declare


maxrecords constant int:=100000;


i int :=1;


begin


for i in 1..maxrecords loop


insert into t3 values(i,i,'ocpyang');


end loop;


dbms_output.put_line(' 成功录入数据! ');


commit;


end;


/


declare


maxrecords constant int:=200000;


i int :=100001;


begin


for i in 100001..maxrecords loop


insert into t3(sid,sname) values(i,'ocpyang');


end loop;


dbms_output.put_line(' 成功录入数据! ');


commit;


end;


/


create index index_sno on t3(sno);


exec dbms_stats.gather_table_stats('SYS','T3',cascade=>TRUE);


***********


1.count


***********


SQL> set autotrace traceonly explain stat;


SQL> select count(*) from t3;


执行计划


----------------------------------------------------------


Plan hash value: 463314188


-------------------------------------------------------------------


| Id | Operation | Name | Rows | Cost (%CPU)| Time |


-------------------------------------------------------------------


| 0 | SELECT STATEMENT | | 1 | 2 (0)| 00:00:01 |


| 1 | SORT AGGREGATE | | 1 | | |


| 2 | TABLE ACCESS FULL| T3 | 82 | 2 (0)| 00:00:01 |


-------------------------------------------------------------------


Note


-----


- SQL plan baseline "SQL_PLAN_27gnhfjz9qahj14fae16c" used for this statement


统计信息


----------------------------------------------------------


55 recursive calls


38 db block gets


521 consistent gets


19 physical reads


14676 redo size


527 bytes sent via SQL*Net to client


520 bytes received via SQL*Net from client


2 SQL*Net roundtrips to/from client


0 sorts (memory)


0 sorts (disk)


1 rows processed


--通过全表扫描实现的.


SQL> select count(*) from t1 where sid is not null;


执行计划


----------------------------------------------------------


Plan hash value: 1551730033


--------------------------------------------------------------------------------------


| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |


--------------------------------------------------------------------------------------


| 0 | SELECT STATEMENT | | 1 | 13 | 68 (0)| 00:00:01 |


| 1 | SORT AGGREGATE | | 1 | 13 | | |


| 2 | INDEX FAST FULL SCAN| SYS_C0023596 | 85899 | 1090K| 68 (0)| 00:00:01 |


--------------------------------------------------------------------------------------


Note


-----


- dynamic sampling used for this statement (level=2)


- SQL plan baseline "SQL_PLAN_4xztry6akgpqqf2d247c8" used for this statement


统计信息


----------------------------------------------------------


4 recursive calls


0 db block gets


310 consistent gets


0 physical reads


0 redo size


527 bytes sent via SQL*Net to client


520 bytes received via SQL*Net from client


2 SQL*Net roundtrips to/from client


0 sorts (memory)


0 sorts (disk)


1 rows processed


--通过索引实现的.