zoukankan      html  css  js  c++  java
  • Oracle 中count(1) 和count(*) 的区别

        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.   
  • 相关阅读:
    HDOJ2003求绝对值
    HDOJ2002计算球体积
    jsp input 限制只可输入时分秒 My97DatePicker
    BigDecimal格式化
    官方 Animator 例子解析 Animator.MatchTarget
    LoadAssetAtPath 与 Load 的区别
    SQLite 学习流水账笔记
    Unity3D Development模式下的一个小问题
    Sqlitekit 封装管理
    PhotoshopCS4轻松将PSD分层导出为Png分层
  • 原文地址:https://www.cnblogs.com/langtianya/p/4962663.html
Copyright © 2011-2022 走看看