教程集 www.jiaochengji.com
教程集 >  数据库  >  mysql  >  正文 有关 mysql count(*) 与 count(col) 查询效率的比较分析

有关 mysql count(*) 与 count(col) 查询效率的比较分析

发布时间:2015-11-11   编辑:jiaochengji.com
有关 MySQL count(*) 与 count(col) 查询效率的比较分析,感兴趣的朋友可以参考下。

有关 MySQL count(*) 与 count(col) 查询效率的比较分析,感兴趣的朋友可以参考下。

优化总结:
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 fromsphinx;
+———-+
| totalnum |
+———-+
|  1120100 |
+———-+
1 row in set (0.00sec)

查询二:
 

复制代码 代码如下:
mysql> select count(*) as totalnum from sphinxwhere id>1000;
+———-+
| totalnum |
+———-+
|  1119100 |
+———-+
1 row in set (2.17sec)

查询三:
 

复制代码 代码如下:
mysql> select count(*) as totalnum from sphinxwhere id>1000;
+———-+
| totalnum |
+———-+
|  1119100 |
+———-+
1 row in set (0.61sec)

查询五:
 

复制代码 代码如下:
mysql> select count(id) as totalnum fromsphinx;
+———-+
| totalnum |
+———-+
|  1120100 |
+———-+
1 row in set (0.00sec)

查询六:
 

复制代码 代码如下:
mysql> select count(til) as totalnum from sphinxwhere id>1000;
+———-+
| totalnum |
+———-+
|  1119100 |
+———-+
1 row in set (1 min38.61 sec)

查询七:
 

复制代码 代码如下:
mysql> select count(id) as totalnum from sphinxwhere id>11000;
+———-+
| totalnum |
+———-+
|  1109100 |
+———-+
1 row in set (0.61sec)

查询八:
 

复制代码 代码如下:
mysql> select count(id) as totalnum fromsphinx;
+———-+
| totalnum |
+———-+
|  1120100 |
+———-+
1 row in set (0.03sec)

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

您可能感兴趣的文章:
有关 mysql count(*) 与 count(col) 查询效率的比较分析
mysql优化之如何定位效率较低的SQL
php分页代码与分页原理
理解myisam和innodb中count(*)的区别
Mysql分页查询方法比较
mysql子查询的五种方式
mysql子查询的实例总结
mysql打开慢查询日志的方法
mysql优化之定位效率较低的SQL
mysql随机取数据的几种方法

[关闭]
~ ~