我可以: 邀请好友来看>>
ZOL星空(中国) > 技术星空(中国) > MySQL星空(中国) > MySQL count(*) 与 count(col) 查询效率比较
帖子很冷清,卤煮很失落!求安慰
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

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

152浏览 / 2回复

超音速毛豆

超音速毛豆

0
精华
7
帖子

等  级:Lv.6
经  验:9563
  • Z金豆: 0

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:北京
  • 注  册:2006-07-20
  • 登  录:2019-01-13
  • 身份验证
发表于 2009-05-31 16:08:38
电梯直达 确定
楼主

优化总结

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(*) 明显多出数量级的时间。

lihui8852

lihui8852


精华

帖子

等  级:Lv.5
经  验:5527
发表于 2009-05-31 20:48:28 1楼
实用 支持

110119linlin

110119linlin


精华

帖子

等  级:Lv.5
经  验:3697
发表于 2009-06-01 20:19:53 2楼
count(\'X\')效率会更高些吧?
高级模式
星空(中国)精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表