为什么select count(主键) from table xxx;比select count(*) from table xxx;效率要高?

999朵玫瑰 2012-01-13 08:55:26
我是个java程序员,以前做开发的时候,写sql查询的时候都是用select count(*) from table xxx;的啊,经理给我说,“count(*)的,改成count(主键)”!
为什么select count(主键) from table xxx;比select count(*) from table xxx;效率要高?
...全文
195 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
999朵玫瑰 2012-01-16
  • 打赏
  • 举报
回复
谢谢各位大侠解惑
trainee 2012-01-15
  • 打赏
  • 举报
回复
既然都一样, 那就听经理的, 改为主键, 获取他想移植到其他数据库
ACMAIN_CHM 2012-01-13
  • 打赏
  • 举报
回复
[Quote]为什么select count(主键) from table xxx;比select count(*) from table xxx;效率要高?[/Quote]这个结论你是从哪儿来的? 建议测试一下。
ACMAIN_CHM 2012-01-13
  • 打赏
  • 举报
回复
建议你直接问你们经理。 或许他根本不懂,也只是听什么人说的。或者在其它某种数据库中或许有差别。
999朵玫瑰 2012-01-13
  • 打赏
  • 举报
回复
听各位大侠说,貌似效率差不多啊?
那为啥子经理要用select count(主键) from table xxx;呢?他也没说效率高,只是直接让我用count(主键)
iihero_ 2012-01-13
  • 打赏
  • 举报
回复
这里,希望能澄清一个概念。
1. count(PK) 和 count(*)结果是一样的,性能在目前绝大多数数据库的实现里头,也基本上是一样的。
如果有的DBMS笨到count(PK)始终使用索引扫描,而count(*)根据实际情况进行表扫描和索引扫描动态调整,则在表扫描的情况下,可能count(*)要快一些,这已经是历史了。

2. count(*) 和 count(非PK字段),
这个比较是没有意义的。
count(非PK字段)统计的是该字段值不为空的记录行的总行数。

因此count(非PK字段)并不总等于count(*)的值。两个查询的结果都不一定相等,比较时间又有什么意义呢。
yangfei_01 2012-01-13
  • 打赏
  • 举报
回复
查询效率也和数据表类型有关系,MyISAM表和InnerDB表都会有差别。
兼哲 2012-01-13
  • 打赏
  • 举报
回复
你这个观念是完全错误的,你们经理也是很ox的


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


以上 all,你滴明白?
Lemon2050 2012-01-13
  • 打赏
  • 举报
回复
在MySQL中,其实count(*)的性能更好。
通常count(*)与count(主键)等价,但是优于count(col),这里的col表示一个不是主键的字段。

为什么count(主键)和count(*)快呢,因为主键通常都会自动建立了相应的索引,有了所以的字段当然比没有索引的快一点。至于其他的,呵呵,我也不知道
rucypli 2012-01-13
  • 打赏
  • 举报
回复
一样 你当sql傻啊

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧