mysql count优化_MySQL count()函数及其优化

很简单,就是为了统计记录数

由SELECT返回

为了理解这个函数,让我们祭出 employee_tbl 表

AAffA0nNPuCLAAAAAElFTkSuQmCC

所有记录

AAffA0nNPuCLAAAAAElFTkSuQmCC

统计行的总数

AAffA0nNPuCLAAAAAElFTkSuQmCC

计算 Zara 的记录数

注意:由于 SQL 查询对大小写不敏感,所以在 WHERE 条件中,无论是写成 ZARA 还是 Zara,结果都是一样的

count(1),count(*),count(字段)区别

count(1)和count(*)

作用

都是检索表中所有记录行的数目,不论其是否包含null值

区别

count(1)比count(*)效率高

二 . count(字段)与count(1)和count(*)的区别

count(字段)的作用是检索表中的这个字段的非空行数,不统计这个字段值为null的记录任何情况下SELECT COUNT(1) FROM tablename是最优选择

尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种

杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现

如果表没有主键,那么count(1)比count(*)快

如果有主键,那么count(主键,联合主键)比count(*)快

如果表只有一个字段,count(*)最快

count(1)跟count(主键)一样,只扫描主键。

count(*)跟count(非主键)一样,扫描整个表

明显前者更快一些。

执行效果: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(*)基本没有差别!count(1) and count(字段)

两者的主要区别是

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

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

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()最优。

实例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)

作者:芥末无疆sss

链接:https://www.jianshu.com/p/fe3ee73c0887

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dz论坛连接mysql数据库_dz论坛搬家后连接数据库等教程

dz搬家后,第一步就是上传源文件到网站根目录和导入数据库然后修改对应的数据库连接配置文件 一共有三个这样修改之后网站就可以访问啦1、config/config_global.php$_config[db][1][dbuser] 数据库用户名;$_config[db][1][dbpw] 数据库密码;$_config[db][1][dbname…

php mysql循环语句怎么写_mysql数据库循环语句该怎么写???

数据库结构num date2 2013-07-245 2013-07-258 2013-08-0310 2013-08-224 2013-09-10最后要在页面中输出为一个行行统计格式7月份 7条记录8月份 18条记录9月份 4条记录要求sql语句只有一句话,有的人会想可以select (count(条件))关键是还要换行的。。有点不会了。回…

ntext在mysql_varchar和text说不清的那些事

数据库定义到char类型的字段时,不知道大家是否会犹豫一下,到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢?结果很可能是两种,一种是节俭人士的选择:最好是用定长的,感觉比变长能省些空间&am…

字符串转16进制_16、atoi-整数字符串转整数-leetcode8-中等

思路:借助正则表达式。class Solution:def myAtoi(self, s: str) -> int:import repattern re.compile(r^[-]?d) # 生成patterns s.lstrip() #去除左侧空格num_str pattern.findall(s) #找到pattern,返回一个listnum int(*num_str) #用*将list解…

vue移动端通过px动态计算图片宽高_vue图片宽高自适应_移动web图片高度自适应的解决方案...

由于图片的加载是在dom加载完成之后进行的,于是,在手机端浏览网页时,经常会看到页面刚打开时很多内容叠在一起,当图片加载完成后,页面会由于图片加载完成出现明显的抖动针对这个问题,有以下几种解决方案媒体…

mysql日期为00_MySQL 8.0.13 设置日期为0000-00-00 00:00:00时出现的问题

刚开始学习 数据库 操作,今天存数据时发现,保存的时候报错 (Error 1292: Incorrect datetime value: 0000-00-00 for column deleted_at at row 1),之后就搜索了下原因,是因为 MySQL存日期时不允许出现这种格式导致的。下面记录下…

MySQL编程技巧_MySQL学习笔记---MySQL开发技巧

SQL语句分类DDL:数据定义语言 --- CREATE、ALTER、DROP、TRUNCATETPL:事务处理语言 --- COMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTIONDCL:数据控制语言 --- GRANT、REVOKEDML:数据操作语言 --- SELECT、UPDATE、INSERT、DELETEj…

kafka topic 目录存放在哪_Kafka系列文章之安装测试-第2篇

前言上篇文章讲解了 Kafka 的基础概念和架构,了解了基本概念之后,必须得实践一波了,所谓“实践才是检验真理的唯一办法”,后续系列关于 Kafka 的文章都以 kafka_2.11-0.9.0.0 为例;另外为了让大家快速入门,…

mysql的操作语句_Mysql最常用的操作语句收集

Mysql中常用语句简单易学springboot微服务是现在流行的框架,目前大多数做java的人都在使用,java的生态一直很好,各种插件各种第三方jar包推动着java的运行。Mysql是Springboot最常用的数据库,主要原因是Mysql免费而且轻量。考虑性…

stlink 升级固件以后失败_ST-Link不能下载程序的几种解决办法

一直在用J-LINK,最近改用ST-Link,出现了不少无法下载程序的情况,这里列出几种解决的办法(针对STM32F103系列):1#是不是你没有选择Flash算法?什么都没有加的话,会提示“找不到Flash算法”的哦2#是不是你JTAG…

java获取b站动态列表地址_爬虫入门(三)爬取b站搜索页视频分析(动态页面,DBUtils存储)...

这一次终于到了分析b站视频了。开始体会到写博客非常占用学技术的时间,但是还是希望能总结,沉淀下来。工具:使用Webmaigc框架,DBUtils,C3P0连接池。分析过程:b站的搜索页面是这样的。如果浏览器右键查看源代…

python a和b字符串和占位符输出_Python占位符的使用与format函数字符串格式化详解...

Python字符串格式化01字符串的格式化分类字符串的格式化方法共两种:占位符(%)与format方式。占位符方式在Python2比较常见,随着Python3到来,format方式变得广泛起来,format函数常与print()函数结合使用,具备很强的格式…

18135usm_佳能PZ-E1+EF-S 18-135mm f/3.5-5.6 IS USM镜头 小型工作室的利器

EF-S 18-135mm f/3.5-5.6 IS USM 在大神眼里据对是属于狗头系列的 哈哈哈 但是这货如果搭配佳能的 PZ-E1 在配合佳能80D 那绝对是小型视频工作室的首选 !!!mxcpTB2rqUOg80kpuFjSsppXXcGTXXa_!!104284319.jpg (156.5 KB, 下载次数: 1)2017-3-…

java服务器要二次编译,ecology项目二次开发环境搭建

ecology项目二次开发环境搭建Submitted By Weaver文档版本控制文档简要信息:文档主题(Title)ecology项目二次开发环境搭建作者(Author)审批者 (To Be Approved By)说明 (Comments)ecology项目二次开发环境搭建文件名称 (File Name)文档版本历史:序号日期…

列车matlab模型,【国家级精品课程】-中南大学-数学建模-lingo-matlab-优化建模-数模培训-全国赛论文-京沪线列车调度模型(B题)...

【国家级精品课程】-中南大学-数学建模-lingo-matlab-优化建模-数模培训-全国赛论文-京沪线列车调度模型(B题) 答卷编号: 答卷编号: 论文题目: 京沪线列车调度模型(B题) 参赛队员: 1. 唐欢 电话:13100251389 2. 任礼秋…

如何学习matlab 知乎,知乎日报

利用记忆软件 Anki 进行复习:先看一下效果:通过编程(Matlab 程序 main.m)把一集美剧中的每一句话的中英文和语音都分离出来,输入 Anki 进行复习。制作每一集的学习包的大概流程如下:下面是详细步骤:* 流程只适用于装了…

php javascript对象,JavaScript 对象

JavaScript 对象JavaScript 对象是拥有属性和方法的数据。真实生活中的对象,属性和方法真实生活中,一辆汽车是一个对象。对象有它的属性,如重量和颜色等,方法有启动停止等:对象属性方法car.name Fiatcar.model 500car.weight 8…

getlasterror返回57怎么解决_王者荣耀:用时最短职业比赛?3分57秒结束,解说都看呆了!...

原标题:王者荣耀:用时最短职业比赛?3分57秒结束,解说都看呆了!相信很多人都知道,王者荣耀作为一款手机游戏,虽然节奏比英雄联盟这种端游快得多,但一局比赛也要十分钟左右&#xff0c…

35岁学嵌入式合适吗_什么是嵌入式技术?

物联网应用技术中,嵌入式技术是至关重要的。但是,至少有60%的人不了解什么是嵌入式技术。物联网时代的到来,不管是从行业应用,还是智能硬件的爆发,亦或是大数据等等嵌入式技术都得到了史无前例的发展。简单来说&#x…

cvpr2020 人脸检测与识别_投石科技温度检测人脸识别设备装置

投石科技温度检测人脸识别设备装置内容共分为五大块,包括:行业概况、产品简介、核心功能、产品优势、应用场景。行业概况:人工智能安防即“人工智能安防”,以人工智能技术为核心,形成一系列产品和系统解决方案。近两年…