mysql count优化_MySQL count()函数及其优化
很简单,就是为了统计记录数
由SELECT返回
为了理解这个函数,让我们祭出 employee_tbl 表
所有记录
统计行的总数
计算 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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
mysql count优化_MySQL count()函数及其优化相关推荐
- mysql和mybatis优化_MySQL + mybatis的SQL优化方案
sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...
- mybatis与mysql调优_MySQL + mybatis的SQL优化方案
sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...
- mysql推荐内存_mysql大内存高性能优化方案
mysql优化是一个相对来说比较重要的事情了,特别像对mysql读写比较多的网站就显得非常重要了,下面我们来介绍mysql大内存高性能优化方案 8G内存下MySQL的优化 按照下面的设置试试看: ke ...
- mysql sql优化_MySQL数据库SQL语句优化原理专题(三)
需求 做过开发的同学,对分页肯定不会陌生,因为很多前台页面展示,为了更好的展示数据,就会用到分页,所以如何写一个高性能的分页SQL语句,是每一个开发人员需要掌握的技能. 分页SQL 这里给大家写一个分 ...
- mysql的瓶颈_MySQL瓶颈分析与优化
作者:蒋乐兴 简介 通过sysbench的oltp_read_write测试来模拟业务压力.以此来给指定的硬件环境配置一份比较合理的MySQL配置文件. 环境介绍 硬件配置 软件环境 优化层级与指导思 ...
- mysql find()方法_Mysql find_in_set()函数使用方法
find_in_set()函数在mysql中是用来查找字类类型为SET()的内容查询的,下面我来给各位朋友简单的介绍介绍. 先看mysql手册中find_in_set函数的语法: 代码如下 复制代码 ...
- mysql相除_mysql 常用函数
流程控制函数 CASE 函数 [写法-] CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result . ...
- mysql 昨天日期_MySQL 日期函数 今天明天昨天......
MySQL 获得当前日期时间 函数 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | n ...
- split mysql的用法_mysql split函数用法实例
首先,大家要知道的是,在mysql中并没有split函数,需要自己写. 比如下面几个mysql split函数的例子. 例1,获得按指定字符分割的字符串的个数: 复制代码 代码示例: DELIMITE ...
最新文章
- 【OpenCV】将单通道的Mat对象转换为三通道的Mat
- ensp删除静态路由命令_(温州大学)路由与交换机 期末试卷及解析
- 项目需求|室内场景三维空间重建项目
- javascript 错误与调试
- 数字图像处理实验(17):PROJECT 06-04,Color Image Segmentation
- Cocos2d-x VS. OGEngine,联盟与部落的战争
- t3修改计算机后就无法登录了,电脑更换系统后,用友T3登录不上了,一直显示这个,怎么处理,这个怎么解决...
- java后台解析json并保存到数据库_[Java教程]ajax 发送json 后台接收 遍历保存进数据库...
- 在sealos搭建的k8s集群中自定义kubeconfig文件
- vsftpd 虚拟用户详细配置
- 【读书笔记】金字塔原理-目录
- 开源BI工具对比(一):BI介绍
- 使用iOS AirPrint 让你的APP轻松实现打印功能
- 1、spring源码解析之概况流程
- 【沉浸式腾讯云服务器部署安装docker】
- 如何禁用笔记本触摸板
- 软件领域专利申请的特点及案例
- 工作以后,我们如何实现自我提升
- 非常好的Linux编译内核详解 - -
- rtx java_如何使用JAVAWEB集成RTX推送消息
热门文章
- python random函数_详细代码实战讲解:如何用 Python让自己变成天选之子
- python与javascript的区别_python与js区别有哪些
- win7电脑内存信息的查看方法
- 计算机系统存储器分类和总线分类
- 三诺+n20g+微型计算机,原来是他?揭秘三诺永恒系列开山鼻祖
- MySQL 排名函数.md
- Java8————Optional
- 小程序监听android返回键,如何监听小程序返回按钮事件?
- oracle 根据用户备份,Oracle基于用户的备份及恢复
- 五款救急的linux文件恢复软件,五款救急的Linux文件恢复软件