文章出處

    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  
      
       

 

  1. count(1)與count(*)比較:   
  2.   
  3. 如果你的數據表沒有主鍵,那么count(1)比count(*)快   
  4. 如果有主鍵的話,那主鍵(聯合主鍵)作為count的條件也比count(*)要快   
  5. 如果你的表只有一個字段的話那count(*)就是最快的啦   
  6. count(*) count(1) 兩者比較。主要還是要count(1)所相對應的數據字段。   
  7. 如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。   
  8. 因為count(*),自動會優化指定到那一個字段。所以沒必要去count(?),用count(*),sql會幫你完成優化的  
  9.   
  10. count詳解:  
  11.   
  12. count(*)將返回表格中所有存在的行的總數包括值為null的行,然而count(列名)將返回表格中除去null以外的所有行的總數(有默認值的列也會被計入).  
  13. distinct 列名,得到的結果將是除去值為null和重復數據后的結果  
  14.   
  15. ----------------------------------------------------------------------------------------------------------------  
  16. 舉例演示如下:  
  17.   
  18.   
  19. SQL> create table test  
  20. 2 (  
  21. 3 ename varchar2(10),  
  22. 4 sal number(4)  
  23. 5 );  
  24.   
  25. 表已創建。  
  26.   
  27. SQL> insert into test values('fxe1',90);  
  28.   
  29. 已創建 1 行。  
  30.   
  31. SQL> insert into test(ename) values('fxe2');  
  32.   
  33. 已創建 1 行。  
  34.   
  35. SQL> insert into test(ename) values('fxe3');  
  36.   
  37. 已創建 1 行。  
  38.   
  39. SQL> insert into test(ename) values('fxe4');  
  40.   
  41. 已創建 1 行。  
  42.   
  43. SQL> insert into test values('fxe5',80);  
  44.   
  45. 已創建 1 行。  
  46.   
  47. SQL> insert into test values('fxe6',80);  
  48.   
  49. 已創建 1 行。  
  50.   
  51. SQL> select * from test;  
  52.   
  53. ENAME SAL  
  54. ---------- ----------  
  55. fxe1 90  
  56. fxe2  
  57. fxe3  
  58. fxe4  
  59. fxe5 80  
  60.   
  61. fxe6 80  
  62.   
  63. SQL> select count(*) from test;  
  64.   
  65. COUNT(*)  
  66. ----------  
  67. 6  
  68.   
  69. SQL> select count(sal) from test;  
  70.   
  71. COUNT(SAL)  
  72. ----------  
  73. 3  
  74.   
  75.   
  76. SQL> select count(distinct sal) from test;  
  77.   
  78. COUNT(DISTINCTSAL)  
  79. ------------------  
  80. 2  
  81.   
  82. SQL> select distinct sal from test;  
  83.   
  84. SAL  
  85. ----------  
  86. 80  
  87. 90  
  88.   
  89.   

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()