日期:2014-05-17  浏览次数:20773 次

COUNT()函数的性能问题
table表中有不止一列
select count(*) from table

select count(id) from table
有什么性能差别吗
第二种是否会好一些呢?

------解决方案--------------------
1) count(*) 统计所有行、很难走索引、或者走索引代价极大、CBO不会走
2)count(id)统计 id 不为 空的行、如果id列有索引、就可以走索引

综上、在满足业务的情况下、第二种好、
------解决方案--------------------
看效率最最好以查询计划为主,上面两个语句如果仅是统计表的行数,大多数情况下效率是一样的
SQL> select count(*) from emp;

  COUNT(*)
----------
        14


执行计划
----------------------
Plan hash value: 2937609675

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

------解决方案--------------------
 Id  
------解决方案--------------------
 Operation        
------解决方案--------------------
 Name   
------解决方案--------------------
 Rows  
------解决方案--------------------
 Cost (%CPU)
------解决方案--------------------
 Time     
------解决方案--------------------

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

------解决方案--------------------
   0 
------解决方案--------------------
 SELECT STATEMENT 
------解决方案--------------------
        
------解决方案--------------------
     1 
------解决方案--------------------
     1   (0)