1. 程式人生 > >Oracle 中count(1) 和count(*) 的區別

Oracle 中count(1) 和count(*) 的區別

 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> createtable test  2 (  3 ename varchar2(10),  4 sal number(4)  
5 );  表已建立。  SQL> insertinto test values('fxe1',90);  已建立 1 行。  SQL> insertinto test(ename) values('fxe2');  已建立 1 行。  SQL> insertinto test(ename) values('fxe3');  已建立 1 行。  SQL> insertinto test(ename) values('fxe4');  已建立 1 行。  SQL> insertinto 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> selectcount(*) from test;  COUNT(*)  ----------6  SQL> selectcount(sal) from test;  COUNT(SAL)  ----------3  SQL> selectcount(distinct sal) from test;  COUNT(DISTINCTSAL)  ------------------2  SQL> selectdistinct sal from test;  SAL  ----------80  90