mysql count(0) count(*) count(主键) count(非空字段) 效率比较

写代码的时候经理在背后说了一句count(0)的效率高于count(*) ,索性全部测试了一下

结论:1、count(0)效率等于count(*)等于count(主键)等于count(非空字段)

但是 唯一的区别就是count只会统计非空字段

系统配置

  1. processor : 0
  2. vendor_id : GenuineIntel
  3. cpu family : 6
  4. model : 85
  5. model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
  6. stepping : 4
  7. microcode : 0x1
  8. cpu MHz : 2499.986
  9. cache size : 33792 KB
  10. physical id : 0
  11. siblings : 1
  12. core id : 0
  13. cpu cores : 1
  14. apicid : 0
  15. initial apicid : 0
  16. fpu : yes
  17. fpu_exception : yes
  18. cpuid level : 13
  19. wp : yes
  20. flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f rdseed adx smap avx512cd xsaveopt xsavec xgetbv1
  21. bugs :
  22. bogomips : 4999.97
  23. clflush size : 64
  24. cache_alignment : 64
  25. address sizes : 46 bits physical, 48 bits virtual
  26. power management:
  27.  
  28. MemTotal:        2048212 kB
  29. MemFree:           74828 kB
  30. MemAvailable:    1449236 kB
  31. Buffers:           11572 kB
  32. Cached:          1472124 kB
  33. SwapCached:            0 kB
  34. Active:          1460916 kB
  35. Inactive:         432892 kB
  36. Active(anon):     410588 kB
  37. Inactive(anon):     2200 kB
  38. Active(file):    1050328 kB
  39. Inactive(file):   430692 kB
  40. Unevictable:           0 kB
  41. Mlocked:               0 kB
  42. SwapTotal:             0 kB
  43. SwapFree:              0 kB
  44. Dirty:                 0 kB
  45. Writeback:             0 kB
  46. AnonPages:        410164 kB
  47. Mapped:            37160 kB
  48. Shmem:              2672 kB
  49. Slab:              61228 kB
  50. SReclaimable:      50132 kB
  51. SUnreclaim:        11096 kB
  52. KernelStack:        2272 kB
  53. PageTables:         3200 kB
  54. NFS_Unstable:          0 kB
  55. Bounce:                0 kB
  56. WritebackTmp:          0 kB
  57. CommitLimit:     1024104 kB
  58. Committed_AS:     705104 kB
  59. VmallocTotal:   34359738367 kB
  60. VmallocUsed:           0 kB
  61. VmallocChunk:          0 kB
  62. HardwareCorrupted:     0 kB
  63. AnonHugePages:    374784 kB
  64. CmaTotal:              0 kB
  65. CmaFree:               0 kB
  66. HugePages_Total:       0
  67. HugePages_Free:        0
  68. HugePages_Rsvd:        0
  69. HugePages_Surp:        0
  70. Hugepagesize:       2048 kB
  71. DirectMap4k:       53120 kB
  72. DirectMap2M:     2043904 kB
  73. DirectMap1G:           0 kB

表结构

  1. CREATE TABLE `test` (
  2.   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3.   `name` char(50) NOT NULL,
  4.   `text` varchar(50) DEFAULT NULL,
  5.   `userid` int(11) DEFAULT NULL,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=20000001 DEFAULT CHARSET=latin1

创建模拟数据

  1. DELIMITER $$
  2.  
  3. USE `test`$$
  4.  
  5. DROP PROCEDURE IF EXISTS `quickInsert`$$
  6.  
  7. CREATE DEFINER=`root`@`%` PROCEDURE `quickInsert`()
  8. BEGIN
  9.  
  10. DECLARE i INT;
  11. SET i =0;
  12. START TRANSACTION;  
  13. WHILE i < 10000000 DO
  14. IF i MOD 2 = 0 THEN
  15. INSERT INTO test (NAME,TEXT,userid) VALUES (MD5(RAND()*1000),NULL,RAND()*500);
  16. ELSE 
  17. INSERT INTO test (NAME,TEXT,userid) VALUES (MD5(RAND()*1000),MD5(RAND()*3000),RAND()*500);
  18. END IF;
  19. SET i = i+1;
  20. END WHILE;
  21. COMMIT;
  22.     END$$
  23.  
  24. DELIMITER ;

关闭缓存

  1. query_cache_size = 0

mysql vserion

  1. 5.7.21-0ubuntu0.16.04.1-log

数据大小 1千万条 25~30G

  1. CALL quickInsert(); #插入数据

count(0)测试

  • 14.030s
  • 17.094s
  • 17.391s
  • 17.398s
  • 17.081s

count(*)测试

  • 17.297s
  • 17.403s
  • 17.296s
  • 16.965s
  • 17.389s

排除系统波动,基本上没有太大差别

count(主键)

  • 16.980s
  • 16.982s
  • 17.405s
  • 17.229s
  • 17.095s

count(非空字段) 开始出现大量的不确定的时间,所以多测试了多次

  • 17.009s
  • 16.902s
  • 16.993s
  • 14.607s
  • 12.843s
  • 17.404s
  • 17.413s
  • 17.397s
  • 16.898s

可以看出基本上没有太大的区别,出现的波动,我琢磨了一下可能是阿里云上的这台服务器为突发性能的,可能不是太稳定

mysql 5.7中 count(0) count(*) count(主键) count(非空字段)效率比较的更多相关文章

  1. 在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法

    在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法   ==========方法1: --------1. 选相应 ...

  2. MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析

    文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...

  3. SQLServer中查询表结构(表主键 、列说明、列数据类型、所有表名)的Sql语句

    SQLServer中查询表结构(表主键 .列说明.列数据类型.所有表名)的Sql语句 1.查询数据库中的所有表名称: SELECT name FROM SysObjects Where XType=' ...

  4. mysql数据库单表只有一个主键自增id字段,ibatis实现id自增

    mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid">        insert into user_id ...

  5. 关于Hibernate级联更新插入信息时提示主键不为空的问题“org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 ”

    org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual ...

  6. MySQL中myisam和innodb的主键索引有什么区别?

    MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索 ...

  7. MySQL主从复制数据不一致问题【自增主键】

    前言: 今天遇到主从表不一致的情况,很奇怪为什么会出现不一致的情况,因为复制状态一直都是正常的.最后检查出现不一致的数据都是主键,原来是当时初始化数据的时候导致的.现在分析记录下这个问题,避免以后再遇 ...

  8. mysql数据库使用mybatis 插入数据时返回主键

    为了体现题目,特指的是mysql,先贴上代码: <insert id="saveBizProdOrderDetail" useGeneratedKeys="true ...

  9. Java中实现MongoDB自增主键ID

    1.了解MongoDB的ObjectId        MongoDB的文档固定是使用“_id”作为主键的,它可以是任何类型的,默认是个ObjectId对象(在Java中则表现为字符串),那么为什么M ...

随机推荐

  1. Redo与Undo的理解

    本文概要本文的原意是一篇个人学习笔记,为了避免成为草草记录一下的流水账,尝试从给人介绍的角度开写.但在整理的过程中,越来越感觉力不从心,一是细节太多了,原以为足够了解的一个小知识点下可能隐藏了很多细节 ...

  2. 「洛谷P1343」地震逃生 解题报告

    P1343 地震逃生 题目描述 汶川地震发生时,四川XX中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带, ...

  3. NB的程序员,亮瞎了你的眼吗?

    郑重声明: 本文首发于人工博客 1.导读 你能想象到1K的代码能写出什么样的功能强大.效果炫酷的作品吗?来吧,今天小编带领大家认识下下面这位大神的作品. 西班牙程序员Roman Cortes用纯Jav ...

  4. Linux 下解压.tar.gz文件报错 gzip:stdin:not in gzip format 的解决办法!

    [root@hzp124 opt]# tar xzvf 1577255462-qypt.tar gzip: stdin: not in gzip formattar: Child returned s ...

  5. 12款好用的Visual Studio插件,最后一款良心推荐

    目录 01 CodeMaid 02 Markdown Editor 03 ReSharper 04 GitHub Extension for Visual Studio 05 ZenCoding 06 ...

  6. js面试题之手写节流函数和防抖函数

    函数节流:不断触发一个函数后,执行第一次,只有大于设定的执行周期后才会执行第二次 /* 节流函数:fn:要被节流的函数,delay:规定的时间 */ function throttle(fn,dela ...

  7. js绑定下拉框数据源

    ··· buildRule:function (ruleId) { var ruleList = internal.ruleList; if(ruleList){ var programme_sel= ...

  8. 微信小程序--百度地图坐标转换成腾讯地图坐标

    最近开发小程序时出现一个问题,后台程序坐标采用的时百度地图的坐标,因为小程序地图时采用的腾讯地图的坐标系,两种坐标有一定的误差,导致位置信息显示不正确.现在需要一个可以转换两种坐标的方法,经过查询发现 ...

  9. 一个DNS数据包的惊险之旅

    踏上旅程 “小子,快去查一下www.paypal.com的IP地址,我急用,晚了我弄你!”,暴躁老哥一把关上了门,留我一个DNS数据包在冷冰冰的房间. 过了一会儿,一位大叔打开了门,带着我来到了一座叫 ...

  10. Springboot + 持久层框架JOOQ

    简介 官网链接 JOOQ是一套持久层框架,主要特点是: 逆向工程,自动根据数据库结构生成对应的类 流式的API,像写SQL一样 提供类型安全的SQL查询,JOOQ的主要优势,可以帮助我们在写SQL时就 ...