Oracle 中count(1) 和count(*) 的區別
阿新 • • 發佈:2019-02-14
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