本帖最后由 xj90314 于 2012-11-28 09:53:46 编辑

解决方案 »

  1.   

    1、话说这个帖子应该去数据库版块发;
    2、不同数据库 及 不同版本效果不同;
    3、其实很多知识都是在不断更新的,现在绝大部分数据库都已经对count(*)进行过优化了,所以除非是古董级的,否则基本都是直接count(*)。
      

  2.   


    今天刚打开CSDN,看到第一个帖子就是你的
      

  3.   

    就像Mice说的、count(*)已经被优化了!
    count(*)的时候、如果表上有PK、那就走PK、没有PK就找not null索引!
    count(1)如果你1的这个字段有索引则走索引、PK就走PK、如果不是、那就不能提速了!
      

  4.   

    不发执行计划发个时间有什么用。连where条件都不一样的SQL你觉得你改变的只是数据量?直接写count(*)如果走的是索引,根本就不走表。
      

  5.   

    count(*)
    count(1)
    count(字段)
    应该有这三种,意思上面已经说的很明白了,我就不多说了
      

  6.   

    大哥,怎么where不一样呢?我表示的不清楚还是你不忍心仔细看我写的sql
      

  7.   


    是我不忍心问你小学语文老师的近况。select 
    --* 
    count(*)
    from tt where change_date>='2012-05-28' and change_date<='2012-08-28'select 
    --* 
    count(1)
    from tt where change_date>='2012-05-28' and change_date<='2012-08-28'你觉得数据库少count(1)快,对吗?再改个where条件条数多点,你觉得count(*)快起来了,对吗?然后你就觉得select  count(1) from tt 这个东西加大点数据量,count(*)应该更快,这不是你说的吗?这个东西没where条件,和你前面有什么关系?
    要比较你比较的也得是select count(1) from tt where change_date>='1900-01-01' and change_date<='3999-01-01'
      

  8.   

    理论上来说,count(*)统计查询结果多列的行数和单列的行数,结果是一样的,它必然在实现上会选择简单的方式。
      

  9.   

    楼主,这种误差估计都是在任何语句执行范围内的同样一句sql,执行n次,彼此之间时间的误差范围内。
      

  10.   

    select(1)快些吧,我是用select(1),因为项目中都是这样写,随着大家吧,要不select(*)没水平
      

  11.   

    对于大多数商业数据来说
    在有主键或者带有索引时,count(*)更快一些
    这些数据库中,count(1)是不使用索引的,而count(*)会自动扫描列索引(主键或索引)某些文件数据库或者小型数据库可能没有这个优化策略
      

  12.   

    以前总听别人说不要用count(*)的说
      

  13.   

    学习不能盲目,凡是都需要以辩证唯物主义的思想去做。
    支持楼主这种对问题深入测试并与大家共享测试结果的良好心态和做法。
    鄙视道听途说就深信不疑,更有甚者还张扬卖弄的人。
    以上仅代表个人看法。
    ps:我平时也都是count(*),因为我发现在我的数据库中不论是*还是1还是字段,查询计划都相同...
      

  14.   

    楼上说得好!count(0) count(1) count(*) 这到底什么区别啊,个个分别在什么条件下使用啊?