mysql 5.7中 count(0) count(*) count(主键) count(非空字段)效率比较
mysql count(0) count(*) count(主键) count(非空字段) 效率比较
写代码的时候经理在背后说了一句count(0)的效率高于count(*) ,索性全部测试了一下
结论:1、count(0)效率等于count(*)等于count(主键)等于count(非空字段)
但是 唯一的区别就是count只会统计非空字段
系统配置
- processor : 0
- vendor_id : GenuineIntel
- cpu family : 6
- model : 85
- model name : Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
- stepping : 4
- microcode : 0x1
- cpu MHz : 2499.986
- cache size : 33792 KB
- physical id : 0
- siblings : 1
- core id : 0
- cpu cores : 1
- apicid : 0
- initial apicid : 0
- fpu : yes
- fpu_exception : yes
- cpuid level : 13
- wp : yes
- 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
- bugs :
- bogomips : 4999.97
- clflush size : 64
- cache_alignment : 64
- address sizes : 46 bits physical, 48 bits virtual
- power management:
- MemTotal: 2048212 kB
- MemFree: 74828 kB
- MemAvailable: 1449236 kB
- Buffers: 11572 kB
- Cached: 1472124 kB
- SwapCached: 0 kB
- Active: 1460916 kB
- Inactive: 432892 kB
- Active(anon): 410588 kB
- Inactive(anon): 2200 kB
- Active(file): 1050328 kB
- Inactive(file): 430692 kB
- Unevictable: 0 kB
- Mlocked: 0 kB
- SwapTotal: 0 kB
- SwapFree: 0 kB
- Dirty: 0 kB
- Writeback: 0 kB
- AnonPages: 410164 kB
- Mapped: 37160 kB
- Shmem: 2672 kB
- Slab: 61228 kB
- SReclaimable: 50132 kB
- SUnreclaim: 11096 kB
- KernelStack: 2272 kB
- PageTables: 3200 kB
- NFS_Unstable: 0 kB
- Bounce: 0 kB
- WritebackTmp: 0 kB
- CommitLimit: 1024104 kB
- Committed_AS: 705104 kB
- VmallocTotal: 34359738367 kB
- VmallocUsed: 0 kB
- VmallocChunk: 0 kB
- HardwareCorrupted: 0 kB
- AnonHugePages: 374784 kB
- CmaTotal: 0 kB
- CmaFree: 0 kB
- HugePages_Total: 0
- HugePages_Free: 0
- HugePages_Rsvd: 0
- HugePages_Surp: 0
- Hugepagesize: 2048 kB
- DirectMap4k: 53120 kB
- DirectMap2M: 2043904 kB
- DirectMap1G: 0 kB
表结构
- CREATE TABLE `test` (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `name` char(50) NOT NULL,
- `text` varchar(50) DEFAULT NULL,
- `userid` int(11) DEFAULT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=20000001 DEFAULT CHARSET=latin1
创建模拟数据
- DELIMITER $$
- USE `test`$$
- DROP PROCEDURE IF EXISTS `quickInsert`$$
- CREATE DEFINER=`root`@`%` PROCEDURE `quickInsert`()
- BEGIN
- DECLARE i INT;
- SET i =0;
- START TRANSACTION;
- WHILE i < 10000000 DO
- IF i MOD 2 = 0 THEN
- INSERT INTO test (NAME,TEXT,userid) VALUES (MD5(RAND()*1000),NULL,RAND()*500);
- ELSE
- INSERT INTO test (NAME,TEXT,userid) VALUES (MD5(RAND()*1000),MD5(RAND()*3000),RAND()*500);
- END IF;
- SET i = i+1;
- END WHILE;
- COMMIT;
- END$$
- DELIMITER ;
关闭缓存
- query_cache_size = 0
mysql vserion
- 5.7.21-0ubuntu0.16.04.1-log
数据大小 1千万条 25~30G
- 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(非空字段)效率比较的更多相关文章
- 在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法
在jsp中选中checkbox后 将该记录的多个数据获取,然后传到Action类中进行后台处理 双主键情况下 *.hbm.xml中的写法 ==========方法1: --------1. 选相应 ...
- MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析
文章出处:http://inter12.iteye.com/blog/1430144 MYSQL的全表扫描,主键索引(聚集索引.第一索引),非主键索引(非聚集索引.第二索引),覆盖索引四种不同查询的分 ...
- SQLServer中查询表结构(表主键 、列说明、列数据类型、所有表名)的Sql语句
SQLServer中查询表结构(表主键 .列说明.列数据类型.所有表名)的Sql语句 1.查询数据库中的所有表名称: SELECT name FROM SysObjects Where XType=' ...
- mysql数据库单表只有一个主键自增id字段,ibatis实现id自增
mysql数据库单表只有一个主键自增id字段,ibatis实现id自增 <insert id="autoid"> insert into user_id ...
- 关于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 ...
- MySQL中myisam和innodb的主键索引有什么区别?
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址.下图是MyISAM索引的原理图: 这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索 ...
- MySQL主从复制数据不一致问题【自增主键】
前言: 今天遇到主从表不一致的情况,很奇怪为什么会出现不一致的情况,因为复制状态一直都是正常的.最后检查出现不一致的数据都是主键,原来是当时初始化数据的时候导致的.现在分析记录下这个问题,避免以后再遇 ...
- mysql数据库使用mybatis 插入数据时返回主键
为了体现题目,特指的是mysql,先贴上代码: <insert id="saveBizProdOrderDetail" useGeneratedKeys="true ...
- Java中实现MongoDB自增主键ID
1.了解MongoDB的ObjectId MongoDB的文档固定是使用“_id”作为主键的,它可以是任何类型的,默认是个ObjectId对象(在Java中则表现为字符串),那么为什么M ...
随机推荐
- Redo与Undo的理解
本文概要本文的原意是一篇个人学习笔记,为了避免成为草草记录一下的流水账,尝试从给人介绍的角度开写.但在整理的过程中,越来越感觉力不从心,一是细节太多了,原以为足够了解的一个小知识点下可能隐藏了很多细节 ...
- 「洛谷P1343」地震逃生 解题报告
P1343 地震逃生 题目描述 汶川地震发生时,四川XX中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有n个点,m条边.1号点为教室,n号点为安全地带, ...
- NB的程序员,亮瞎了你的眼吗?
郑重声明: 本文首发于人工博客 1.导读 你能想象到1K的代码能写出什么样的功能强大.效果炫酷的作品吗?来吧,今天小编带领大家认识下下面这位大神的作品. 西班牙程序员Roman Cortes用纯Jav ...
- 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 ...
- 12款好用的Visual Studio插件,最后一款良心推荐
目录 01 CodeMaid 02 Markdown Editor 03 ReSharper 04 GitHub Extension for Visual Studio 05 ZenCoding 06 ...
- js面试题之手写节流函数和防抖函数
函数节流:不断触发一个函数后,执行第一次,只有大于设定的执行周期后才会执行第二次 /* 节流函数:fn:要被节流的函数,delay:规定的时间 */ function throttle(fn,dela ...
- js绑定下拉框数据源
··· buildRule:function (ruleId) { var ruleList = internal.ruleList; if(ruleList){ var programme_sel= ...
- 微信小程序--百度地图坐标转换成腾讯地图坐标
最近开发小程序时出现一个问题,后台程序坐标采用的时百度地图的坐标,因为小程序地图时采用的腾讯地图的坐标系,两种坐标有一定的误差,导致位置信息显示不正确.现在需要一个可以转换两种坐标的方法,经过查询发现 ...
- 一个DNS数据包的惊险之旅
踏上旅程 “小子,快去查一下www.paypal.com的IP地址,我急用,晚了我弄你!”,暴躁老哥一把关上了门,留我一个DNS数据包在冷冰冰的房间. 过了一会儿,一位大叔打开了门,带着我来到了一座叫 ...
- Springboot + 持久层框架JOOQ
简介 官网链接 JOOQ是一套持久层框架,主要特点是: 逆向工程,自动根据数据库结构生成对应的类 流式的API,像写SQL一样 提供类型安全的SQL查询,JOOQ的主要优势,可以帮助我们在写SQL时就 ...