MySQL count(*) 与 count(col)  count(1) 查询效率比较


优化总结:

1.任何情况下Select COUNT(*) FROM xxx 是最优选择;
2.尽量减少Select COUNT(*) FROM xxx Where COL = ‘xxx’ 这种查询;
3.杜绝Select COUNT(COL) FROM tablename Where COL = ‘xxx’ 的出现。(其中COL非主键)

环境:
MySQL版本:5.0.45
OS:Windows XP SP3

数据表一:sphinx
+———-+——————+——+—–+———+—————-+
| Field    | Type             | Null | Key | Default | Extra          |
+———-+——————+——+—–+———+—————-+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| til      | varchar(100)     | NO   |     |         |                |
| content  | text             | NO   |     |         |                |
| dataline | int(11)          | NO   |     |         |                |
+———-+——————+——+—–+———+—————-+

记录数:1120100

查询一:

mysql> select count(*) as totalnum from sphinx;
+———-+
| totalnum |
+———-+
|  1120100 |
+———-+
1 row in set (0.00 sec)

查询二:

mysql> select count(*) as totalnum from sphinx where id>1000;
+———-+
| totalnum |
+———-+
|  1119100 |
+———-+
1 row in set (2.17 sec)

查询三:

mysql> select count(*) as totalnum from sphinx where id>1000;
+———-+
| totalnum |
+———-+
|  1119100 |
+———-+
1 row in set (0.61 sec)

查询四:

mysql> select count(*) as totalnum from sphinx where id>1000;
+———-+
| totalnum |
+———-+
|  1119100 |
+———-+
1 row in set (0.61 sec)

查询五:

mysql> select count(id) as totalnum from sphinx;
+———-+
| totalnum |
+———-+
|  1120100 |
+———-+
1 row in set (0.00 sec)

查询六:

mysql> select count(til) as totalnum from sphinx where id>1000;
+———-+
| totalnum |
+———-+
|  1119100 |
+———-+
1 row in set (1 min 38.61 sec)

查询七:

mysql> select count(id) as totalnum from sphinx where id>11000;
+———-+
| totalnum |
+———-+
|  1109100 |
+———-+
1 row in set (0.61 sec)

查询八:

mysql> select count(id) as totalnum from sphinx;
+———-+
| totalnum |
+———-+
|  1120100 |
+———-+
1 row in set (0.03 sec)

结论:

在 select count() 没有 where 条件的时候 select count(*) 和 select count(col) 所消耗的查询时间相差无几。
在 select count() 有 where 条件的时候 select count(col) 所消耗的查询时间 比 select count(*) 明显多出数量级的时间。

count(*)与count(1)的区别有多大?

当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!

从执行计划来看,count(1)和count(*)的效果是一样的。
但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。
这个也与表的记录数多少有关!如果1w以外的数据量,做过表分析之后,反而count(1)的用时比count(*)多了。

另外,当数据量达到10w多的时候,使用count(1)要比使用count(*)的用时稍微少点!
因此:count(1)和count(*)基本没有差别!

上一篇: 怎么在EXCEL中加入逗号
下一篇: UltraEdit 14.20.1.1008注册机
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: ASP
相关日志:
评论: 1 | 引用: 0 | 查看次数: 18367
wangts[2009-04-02 10:44 AM | | | 124.207.40.151 | del | 取消审核 | 回复回复]
沙发
这个统计的前提应该是id不是主键
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1 字 | UBB代码 关闭 | [img]标签 关闭