Oracle 中count(1) 和count(*) 的区别

来源:互联网 发布:杜兰特技术特点知乎 编辑:程序博客网 时间:2024/06/14 17:28

  • ount(1)与count(*)比较:   
  •   
  • 如果你的数据表没有主键,那么count(1)比count(*)快   
  • 如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快   
  • 如果你的表只有一个字段的话那count(*)就是最快的啦   
  • count(*) count(1) 两者比较。主要还是要count(1)所相对应的数据字段。   
  • 如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。   
  • 因为count(*),自动会优化指定到那一个字段。所以没必要去count(?),用count(*),sql会帮你完成优化的  
  •   
  • count详解:  
  •   
  • count(*)将返回表格中所有存在的行的总数包括值为null的行,然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入).  
  • distinct 列名,得到的结果将是除去值为null和重复数据后的结果  
  •   
  • ----------------------------------------------------------------------------------------------------------------  
  • 举例演示如下:  
  •   
  •   
  • SQL> create table test  
  • 2 (  
  • 3 ename varchar2(10),  
  • 4 sal number(4)  
  • 5 );  
  •   
  • 表已创建。  
  •   
  • SQL> insert into test values('fxe1',90);  
  •   
  • 已创建 1 行。  
  •   
  • SQL> insert into test(ename) values('fxe2');  
  •   
  • 已创建 1 行。  
  •   
  • SQL> insert into test(ename) values('fxe3');  
  •   
  • 已创建 1 行。  
  •   
  • SQL> insert into test(ename) values('fxe4');  
  •   
  • 已创建 1 行。  
  •   
  • SQL> insert into test values('fxe5',80);  
  •   
  • 已创建 1 行。  
  •   
  • SQL> insert into test values('fxe6',80);  
  •   
  • 已创建 1 行。  
  •   
  • SQL> select * from test;  
  •   
  • ENAME SAL  
  • ---------- ----------  
  • fxe1 90  
  • fxe2  
  • fxe3  
  • fxe4  
  • fxe5 80  
  •   
  • fxe6 80  
  •   
  • SQL> select count(*) from test;  
  •   
  • COUNT(*)  
  • ----------  
  • 6  
  •   
  • SQL> select count(sal) from test;  
  •   
  • COUNT(SAL)  
  • ----------  
  • 3  
  •   
  •   
  • SQL> select count(distinct sal) from test;  
  •   
  • COUNT(DISTINCTSAL)  
  • ------------------  
  • 2  
  •   
  • SQL> select distinct sal from test;  
  •   
  • SAL  
  • ----------  
  • 80  
  • 90  
  • 原创粉丝点击