• 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.   
  • 相关阅读:
    (转)上海驾照到期换证流程及注意事项
    sql 获取批处理信息的脚本(优化器在处理批处理时所发生的优化器事件)
    C# xml通过xslt转换为html输出
    C#基础 继承和实例化
    sqlserver 获取数据库、表和字段相关信息
    Json反序列化为动态类型(dynamic)
    Aspose.cells常用用法1
    C# 生成缩略图 去除图片旋转角度
    C# 压缩图片到指定宽度,假如图片小于指定宽度 判断图片大小是否大于指定大小(KB) 如果大于则压缩图片质量 宽高不变
    C# 2个List<T>比较内部项是否相等
  • 原文地址:https://www.cnblogs.com/langtianya/p/4962663.html
Copyright © 2020-2023  润新知