我是个java程序员,以前做开发的时候,写sql查询的时候都是用select count(*) from table xxx;的啊,经理给我说,“count(*)的,改成count(主键)”!
为什么select count(主键) from table xxx;比select count(*) from table xxx;效率要高?

解决方案 »

  1.   

    在MySQL中,其实count(*)的性能更好。
    通常count(*)与count(主键)等价,但是优于count(col),这里的col表示一个不是主键的字段。为什么count(主键)和count(*)快呢,因为主键通常都会自动建立了相应的索引,有了所以的字段当然比没有索引的快一点。至于其他的,呵呵,我也不知道
      

  2.   

    你这个观念是完全错误的,你们经理也是很ox的 
    1. count(*) 在MyISAM里是走常量的,因为MyISAM记录数有单独数据,count(xx)命令解析则和count(*)完全不同。
    2. 你要搞清楚count(xx)是什么意思,例如字段 AA,count(AA)表示的是统计 AA 字段内 非 Null记录数。
    3. 有人用count(1) 去代替 count(*) 这也是毫无意义的,因为至少从MySQL来说,count(*)是被优化过的,可以参考第一条。
    以上 all,你滴明白?
      

  3.   

    查询效率也和数据表类型有关系,MyISAM表和InnerDB表都会有差别。
      

  4.   

    这里,希望能澄清一个概念。
    1. count(PK) 和 count(*)结果是一样的,性能在目前绝大多数数据库的实现里头,也基本上是一样的。
    如果有的DBMS笨到count(PK)始终使用索引扫描,而count(*)根据实际情况进行表扫描和索引扫描动态调整,则在表扫描的情况下,可能count(*)要快一些,这已经是历史了。2. count(*) 和 count(非PK字段),
    这个比较是没有意义的。
    count(非PK字段)统计的是该字段值不为空的记录行的总行数。因此count(非PK字段)并不总等于count(*)的值。两个查询的结果都不一定相等,比较时间又有什么意义呢。
      

  5.   

    听各位大侠说,貌似效率差不多啊?
    那为啥子经理要用select count(主键) from table xxx;呢?他也没说效率高,只是直接让我用count(主键)