相信很多小伙伴都想知道count(1) 和 count(*) 的速度问题 ,今天我给大家做一下测试。我这里测试的是MySql数据库

声明:测试之前

我数据库表里面有100万条数据。我们先来测试count(*)

可以看出,count(*) 用时间差不多15秒,下面我们看一下count(1)

看到这我知道很多小伙伴还是找不到心里的答案,上面他可有一些客观原因。都是电脑重启后测试的,电脑重启后。肯定会加载启动项。所以效率上肯定有所差异。然而我再重启电脑后测试的select count(1) from test 第一个用时

34秒。所以上面做一个了解。下面我们看看电脑运行处于平稳状态下的对比,请看第一个对比count(*) 5.49 count(1) 5.11

别着急。俗话都是三局两胜,五局三胜,我们看第二次count(*) 4.86 count(1) 5.64

再看第三次count(*) 4.92 count(1) 4.39

第一个总结:count(*)  count(1)  在没条件的情况下两者没有什么区别
然在上面是没有条件的。下面是有条件的

我对比了两次,可以看出count(*) 快于count(1),  下面来解释一下

count(1) 和count(*) 对比

如果你数据库没有主键count(1) 比count(*) 快,如果有主键主键作为条件count() 那么count(1) 比count(*) 快。

如果表里面只有一个字段那么是count(*)最快

count 解释

count(*) 返回表中所有存在行的总数包括null,然而count(1) 返回的是去除null以外的所有行的总数。有默认值的也会被记录

这下就对count 有一定的了解的把。可以动手测试一下

最后总结三条经验,(这个也是好久之前在网上看到的,不过本人亲自测试过)

1.任何情况下select count(*) from table 最优选择

2.减少select count(*) from table where condition = ? 这样的查询

3.杜绝select count(colunm) from table
---------------------
作者:yuan_ren_sheng
来源:CSDN
原文:https://blog.csdn.net/yuan_ren_sheng/article/details/81105306
版权声明:本文为博主原创文章,转载请附上博文链接!

count(1) AND count(*) 对比的更多相关文章

  1. 提高MSSQL数据库性能(1)对比count(*) 和 替代count(*)

    原文:提高MSSQL数据库性能(1)对比count(*) 和 替代count(*) 文章准备的数据库: Atricles 表   数据量60690000条数据 ArticleID 主键自增列+自动建立 ...

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

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

  3. 关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题

    1.关于count(1),count(*),和count(列名)的区别 相信大家总是在工作中,或者是学习中对于count()的到底怎么用更快.一直有很大的疑问,有的人说count(*)更快,也有的人说 ...

  4. Select count(*)、Count(1)、Count(0)的区别和执行效率比较

    记得很早以前就有人跟我说过,在使用count的时候要用count(1)而不要用count(*),因为使用count(*)的时候会对所有的列进行扫描,相比而言count(1)不用扫描所有列,所以coun ...

  5. MySql-count(*)与count(id)与count(字段)之间的执行结果和性能分析

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

  6. sql中count(1)和count(*)有区别吗

    count(*) 对 innodb 而言,它需要把数据从磁盘中读取出来然后累计计数:而 MyISAM 引擎把一个表的总行数存在了磁盘上,所以执行 count(*) 会直接返回这个数,如果有 where ...

  7. COUNT(1)和COUNT(*)区别

    项目经常用到count(1),但是和count(*)什么区别? 从下面实验结果来看,Count (*)和Count(1)查询结果是一样的,都包括对NULL的统计,而count(列名) 是不包括NULL ...

  8. Count(*)或者Count(1)或者Count([列]) 区别

    在SQL 中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理. 往常我经常会看到一些所 ...

  9. select count(*)和select count(1)

    一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键的話 ...

随机推荐

  1. Codeforces1157A(A题)Reachable Numbers

    A. Reachable Numbers Let's denote a function f(x)f(x) in such a way: we add 11 to xx, then, while th ...

  2. 《机器学习_07_03_svm_核函数与非线性支持向量机》

    一.简介 前两节分别实现了硬间隔支持向量机与软间隔支持向量机,它们本质上都是线性分类器,只是软间隔对"异常点"更加宽容,它们对形如如下的螺旋数据都没法进行良好分类,因为没法找到一个 ...

  3. Spring注入的对象到底是什么类型

    开篇 之前,在用spring编码调试的时候,有时候发现被自动注入的对象是原始类的对象,有时候是代理类的对象,那什么时候注入的原始类对象呢,有什么时候注入的是代理类的对象呢?心里就留下了这个疑问.后来再 ...

  4. Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)

    好吧,这个题目我也想了很久,不知道如何用最简单的几个字来概括这篇文章,原本打算取名<Angular单页面应用基于Ocelot API网关与IdentityServer4+ASP.NET Iden ...

  5. Python 图像处理 OpenCV (5):图像的几何变换

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

  6. JUC整理笔记三之测试工具jcstress

    并发测试工具Jcstress使用教程 Jcstress 全称 Java Concurrency Stress,是一种并发压力测试工具,可以帮助研究JVM.java类库和硬件中并发的正确性. Wiki地 ...

  7. pandas如何逐行需改DataFrame

    逐行修改DataFrame而不会报SettingwithCopyWarning警告的方法: df.iloc[行数,df.columns.get_loc(列名)]=new_value 参考:https: ...

  8. matlab自学笔记

    1.字符串格式化,用sprintf如a=sprintf('%.2f_除以%d等于%.3f',1.5,2,0.75)%则a=1.50除以2等于0.750 2.for循环只能针对整数,不能遍历字符串或其他 ...

  9. IT笑话十则(一)

    一.下班前发给你 客户:“这个图下班之前必须发给我!” 设计师:“好的!” 第二天清早. 客户:“图怎么还没发过来?” 设计师:“我还没下班呢…”   二.受伤的老三 行业老大与老二PK,受伤的并非对 ...

  10. Rocket - debug - TLDebugModuleInner - Abstract Command Decoding & Generation

    https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ 介绍抽象命令的解码和生成. 1. accessRegisterCommandReg accessRe ...