(给ImportNew加星标,提高Java技能)

作者:BigoSprite

blog.csdn.net/iFuMI/article/details/77920767

执行效果:

1.  count(1) and count(*)

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

从执行计划来看,count(1)和count(*)的效果是一样的。但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。

如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。

因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!

2. count(1) and count(字段)

两者的主要区别是

  1. count(1) 会统计表中的所有的记录数,包含字段为null 的记录。

  2. count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。

转自:http://www.cnblogs.com/Dhouse/p/6734837.html

count(*) 和 count(1)和count(列名)区别  

执行效果上:

  • count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL 

  • count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL

  • count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计

执行效率上:

  • 列名为主键,count(列名)会比count(1)快

  • 列名不为主键,count(1)会比count(列名)快

  • 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)

  • 如果有主键,则 select count(主键)的执行效率是最优的

  • 如果表只有一个字段,则 select count(*)最优。

转自:http://eeeewwwqq.iteye.com/blog/1972576

实例分析

mysql> create table counttest(name char(1), age char(2));Query OK, 0 rows affected (0.03 sec)mysql> insert into counttest values    -> ('a', '14'),('a', '15'), ('a', '15'),    -> ('b', NULL), ('b', '16'),    -> ('c', '17'),    -> ('d', null),    ->('e', '');Query OK, 8 rows affected (0.01 sec)Records: 8  Duplicates: 0  Warnings: 0mysql> select * from counttest;+------+------+| name | age  |+------+------+| a    | 14   || a    | 15   || a    | 15   || b    | NULL || b    | 16   || c    | 17   || d    | NULL || e    |      |+------+------+8 rows in set (0.00 sec)mysql> select name, count(name), count(1), count(*), count(age), count(distinct(age))    -> from counttest    -> group by name;+------+-------------+----------+----------+------------+----------------------+| name | count(name) | count(1) | count(*) | count(age) | count(distinct(age)) |+------+-------------+----------+----------+------------+----------------------+| a    |           3 |        3 |        3 |          3 |                    2 || b    |           2 |        2 |        2 |          1 |                    1 || c    |           1 |        1 |        1 |          1 |                    1 || d    |           1 |        1 |        1 |          0 |                    0 || e    |           1 |        1 |        1 |          1 |                    1 |+------+-------------+----------+----------+------------+----------------------+5 rows in set (0.00 sec)

额外参考资料:http://blog.csdn.net/lihuarongaini/article/details/68485838

推荐阅读

(点击标题可跳转阅读)

Sql Or NoSql,看完这一篇你就都懂了

全双工通信的 WebSocket

深入理解 JWT 的使用场景和优劣

看完本文有收获?请转发分享给更多人

关注「ImportNew」,提升Java技能

好文章,我在看❤️

select count(*)加其他字段_count(1)、count(*) 与 count(列名) 的执行区别相关推荐

  1. count(1)、count(*) 与 count (列名) 的执行区别

    (给视学算法加星标,提升数据技能) 转自:BigoSprite https://blog.csdn.net/iFuMI/article/details/77920767 执行效果:  1.count( ...

  2. MySQL中count(1)、count(*) 与 count(列名) 的执行区别

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

  3. 关于sql语句中的count(*),count(1),count(具体字段)的介绍

    在sql语句中有一个聚合函数count():这个函数里面可以写*,可以写数字(不仅仅只可以写1),可以写具体字段,他们之间有什么区别呢? 查阅资料得知,count(*)与count(1)在各种数据库服 ...

  4. count 有条件 mysql_【笔记】Mysql中使用count加条件统计

    前言mysql 最近发如今处理Mysql问题时,count()函数频繁上镜,经常出如今分组统计的情景下,可是有时候并非使用group by分好组就能够直接统计了,好比说一个常见的需求,统计每一个班级男 ...

  5. mysql多条件count_Mysql中使用count加条件统计

    Mysql中使用count加条件统计  0  753 坚持奋斗 2019/6/28 13:19:56 江苏 南京 新建一个Mysql数据表a,包含id和num两个字段 [pre] mysql> ...

  6. Mysql中使用count加条件统计

    文章目录 前言 测试环境 准备工作 条件统计 总结 前言 最近发现在处理Mysql问题时,count()函数频繁上镜,常常出现在分组统计的情景下,但是有时候并不是使用group by分好组就可以直接统 ...

  7. 在MySql数据库中创建数据库dbjava,数据表book,字段包括bno,bname,price,count(编号、书名、单价、数量)。 利用JDBC连接数据库dbjava,实现数据表的增删 改查

    题目 1.在MySql数据库中创建数据库dbjava,数据表book,字段包括bno,bname,price,count(编号.书名.单价.数量). 2.利用JDBC连接数据库dbjava,实现数据表 ...

  8. insert into select 批量加载出错解决方案

    当使用insert into select 批量加载数据的时候,可能会碰到因为某些数据不符合加载条件,而导致整个insert 语句无法执行,全部rollback.这时可以使用DML 错误日志的特性,解 ...

  9. mysql数据库中count的作用_详解 MySQL中count函数的正确使用方法

    1. 描述 在MySQL中,当我们需要获取某张表中的总行数时,一般会选择使用下面的语句 select count(*) from table; 其实count函数中除了*还可以放其他参数,比如常数.主 ...

最新文章

  1. 一个很好的Qt教程个人主页
  2. MyBatis 在xml文件中处理大于号小于号的方法
  3. electron 桌面程序_如何使用Electron使用JavaScript构建您的第一个桌面应用程序
  4. anaconda python_Anaconda下Python环境下载及安装
  5. 如何将SQL Profiler Trace读入到SQL的表中?
  6. python基于udp的网络聊天室再用tkinter显示_Python3:Tkinter gui中的UDP包发送/接收
  7. GIMP教程 5 选择
  8. 吉安市推行“区块链+电子证照+无证办理”模式
  9. Unity 粒子特效 不受Time.deltaTime影响
  10. cad解除块的快捷命令_Auto CAD2007解除块快捷键是什么呢?
  11. 关于AI的目标导向型行动计划
  12. Web前端 vs Web后端 区别是什么
  13. linux常用指令词典
  14. 杂篇-01-Unity中创建Mesh时遇到的问题
  15. [解疑]图像、矩阵的二维空间变换
  16. 使用电脑登录邮箱账号的流程是什么?
  17. 【Win10系统安装】联想小新V3000安装Win10操作系统,并使用Administrator账户登录
  18. 关于‘-[UIViewController _loadViewFromNibNamed:bundle:] loaded the “XXXView“ nib but the view outlet wa
  19. MATLAB教程七:MATLAB符号计算
  20. MySQL无法成功安装,如何将MySQL卸载干净

热门文章

  1. angular 缓存 html5,Angular 如何及时更新客户端缓存?
  2. 4.21 IP通信原理
  3. hdu3790 最短路径问题(spfa)
  4. GIT 换行符相关操作
  5. Mysql中分页查询两个方法比较
  6. Odoo小数精度及货币精度详解
  7. jQuery 操作 DOM
  8. 利用python实现Windows8定时自动关机和休眠
  9. yum源及yum仓库服务搭建讲解
  10. 年过四十的男人,为何路越走越窄?