Oracle 中count(1) 和count(*) 的区别
                        
                            时间:2021-07-01 10:21:17
                            帮助过:2人阅读
							                        
                     
                    
                    
                    )与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  
      
       
 
- count(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  
-   
-    
 
Oracle 中count(1) 和count(*) 的区别
标签: