在mysql数据库中,当我们需要统计数据的时候,一定会用到count()这个方法,那么count(值)里面的这个值,到底应该怎么选择呢!常见有3种选择,(*,数字,列名),分别列出它们的执行结果和性能对比。

执行效果:  
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL 
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL  
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是null)的计数,即某个字段值为NULL时,不统计。

测试结果:  

 CREATE TABLE `test_count` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `phone` varchar(11) DEFAULT NULL,
  `nick_name` varchar(50) DEFAULT NULL,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `gender` tinyint(1) DEFAULT NULL,
  `is_del` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `index_username` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=17805 DEFAULT CHARSET=utf8;
 [SQL] SELECT COUNT(*) FROM test_count;
受影响的行: 0
时间: 0.828ms [SQL] 
SELECT COUNT(1) FROM test_count;
受影响的行: 0
时间: 0.827ms [SQL] 
SELECT COUNT(id) FROM test_count;
受影响的行: 0
时间: 0.873ms [SQL] 
SELECT COUNT(username) FROM test_count;
受影响的行: 0
时间: 0.981ms [SQL] 
SELECT COUNT(nick_name) FROM test_count;
受影响的行: 0
时间: 7.673ms

在100W+数据下,count(*)和count(1)差距微乎其微,但两者效率大于count(id),count(id)效率明显大于count(column),带索引的count(column)明显效率高于不带索引的。

最终结论:

count(1) > count(*) > count(主键id) > count(带索引column) > count(不带索引column),count(1)效率稍微高于count(*),但差距微乎其微。

MySql-count(*)与count(id)与count(字段)之间的执行结果和性能分析的更多相关文章

  1. MySQL中UPDATE语句里SET后使用AND的执行过程和结果分析

    使用SQL中的UPDATE关键字更新多个字段值时,SET后面的更新字段应该使用逗号而不能用AND.虽然用AND不会报错,但会使更新结果错误,下面我将通过场景来分析当我们使用AND时SQL的执行过程和为 ...

  2. Mysql聚合函数count(*) 的性能分析

    你首先要明确的是,在不同的 MySQL 引擎中,count(*) 有不同的实现方式. MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高: 而 ...

  3. MySQL的统计总数count(*)与count(id)或count(字段)的之间的各自效率性能对比

    执行效果: 1.  count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!  从执行计划来看,count(1)和cou ...

  4. MySQL 笔记整理(14) --count(*)这么慢,我该怎么办?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 14) --count(*)这么慢,我该怎么办? 有时你会发现,随着系统 ...

  5. (转载)MySQL 统计数据行数 Select Count

    (转载)http://www.5idev.com/p-php_mysql_select_count.shtml 统计数据行数 SELECT COUNT() FROM 语法用于从数据表中统计数据行数. ...

  6. mysql Column count doesn't match value count at row 1

    今天执行批量插入的操作,发现报了错 mysql Column count doesn't match value count at row 1. 后来发现原因:是由于写的SQL语句里列的数目和后面的值 ...

  7. mysql错误:Column count doesn't match value count at row 1

    mysql错误:Column count doesn't match value count at row 1 mysql错误:Column count doesn't match value cou ...

  8. 开发中运行mysql脚本,发现提示mysql提示Column count doesn't match value count at row 1错误

    开发中运行mysql脚本,发现提示mysql提示Column count doesn't match value count at row 1错误, 调试后发现是由于写的SQL语句里列的数目和后面的值 ...

  9. mysql提示Column count doesn't match value count at row 1错误

    mysql提示Column count doesn't match value count at row 1错误,后来发现是由于写的SQL语句里列的数目和后面的值的数目不一致, 比如insert in ...

随机推荐

  1. TCP/IP协议的建立连接与关闭连接过程

    一.建立连接(三次握手) 第一次握手:建立连接时,客户端发送SYN(seq=x)包到服务器,并进入SYN_SENT状态,等待服务器的确认.SYN:同步序列编号(Synchronize Sequence ...

  2. strcpy(转载)

    转自:http://www.kuqin.com/clib/string/strcpy.html 原型:extern char *strcpy(char *dest,char *src); 用法:#in ...

  3. J20170520-ts

    手取り   净收入,实收额;用手抓住,到手

  4. socket servlet webservice 区别及使用场景

    原文地址: http://blog.csdn.net/sdjkjsdh/article/details/51569481 1. Socket:使用TCP/IP或者UDP协议在服务器与客户端之间进行传输 ...

  5. SQL 实战教程(八)

    http://www.studyofnet.com/news/247.html 1.修改字段为自增 alter table [dbo].[Logs] drop column ID alter tabl ...

  6. solr 管理页面详解

    solr 服务器管理界面可以查看系统状态.solr设置.分词检测.查询索引.增减core.查看日志等 1.Dashboard(仪表盘) 访问http://localhost:8080/solr时,出现 ...

  7. $.extend(x,y); 函数用法介绍。

    第一篇资料:  转自: https://www.cnblogs.com/yuqingfamily/p/5813650.html 语法:jQuery.extend( [deep ], target, o ...

  8. jquery js 分页

    <html xmlns="http://www.w3.org/1999/xhtml"><head>    <title>jQuery.pager ...

  9. js实现表单checkbox的单选,全选

    全选&单选 //<input type="checkbox" name="" class="quan" value=" ...

  10. reveal.js让程序员做ppt也享受快乐

    前言 程序员除了会写的一手漂亮的代码,也要求做出风格优雅的PPT,诸如向领导汇报工作.向小组成员反馈项目进展自己的工作等等.就本人而言,做ppt还要去找模板,还需要设计风格,内心是焦灼的.于是乎,我搜 ...