我是个java程序员,以前做开发的时候,写sql查询的时候都是用select count(*) from table xxx;的啊,经理给我说,“count(*)的,改成count(主键)”!
为什么select count(主键) from table xxx;比select count(*) from table xxx;效率要高?
为什么select count(主键) from table xxx;比select count(*) from table xxx;效率要高?
通常count(*)与count(主键)等价,但是优于count(col),这里的col表示一个不是主键的字段。为什么count(主键)和count(*)快呢,因为主键通常都会自动建立了相应的索引,有了所以的字段当然比没有索引的快一点。至于其他的,呵呵,我也不知道
1. count(*) 在MyISAM里是走常量的,因为MyISAM记录数有单独数据,count(xx)命令解析则和count(*)完全不同。
2. 你要搞清楚count(xx)是什么意思,例如字段 AA,count(AA)表示的是统计 AA 字段内 非 Null记录数。
3. 有人用count(1) 去代替 count(*) 这也是毫无意义的,因为至少从MySQL来说,count(*)是被优化过的,可以参考第一条。
以上 all,你滴明白?
1. count(PK) 和 count(*)结果是一样的,性能在目前绝大多数数据库的实现里头,也基本上是一样的。
如果有的DBMS笨到count(PK)始终使用索引扫描,而count(*)根据实际情况进行表扫描和索引扫描动态调整,则在表扫描的情况下,可能count(*)要快一些,这已经是历史了。2. count(*) 和 count(非PK字段),
这个比较是没有意义的。
count(非PK字段)统计的是该字段值不为空的记录行的总行数。因此count(非PK字段)并不总等于count(*)的值。两个查询的结果都不一定相等,比较时间又有什么意义呢。
那为啥子经理要用select count(主键) from table xxx;呢?他也没说效率高,只是直接让我用count(主键)