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…

mysql创建表时默认默认_mysql创建数据表时指定默认值教程

指定默认值如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用 CREATE TABLE 语句的列定义中的 DEFAULT 关键字指定。请看下面的例子:输入:create table orderitems(order_num int NOT NULL,order_item int NOT NULL,prod_id…

csv mysql 导入 mac_将sqlserver导出的csv数据导入到ubuntu和mac上的mysql

最近在捣鼓一些数据相关的东西。将sql server里的数据导入到ubuntu和mac上的mysql,方法有很多。不过我选择了最简单的一种:将sql server的数据导成csv,然后将csv导入到mysql。想法挺好,坑挺多。sql server是windows的,…

2012 安装mysql 5.6_如何安装mysql server 5.6

匿名用户1级2016-02-22 回答有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。1. check table 和 repair table登陆mysql 终端…

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(条件))关键是还要换行的。。有点不会了。回…

mac mysql 安装 简书_在Mac系统上配置MySQL以及Squel Pro

为了响应nodejs的大红大紫,最近应用其实现了一些server端的功能。数据库方面选择了老少咸宜的MySQL。今后肯定还会有相关应用需求。特此记录Mac系统下如何安装、配置MySQL及其管理工具Squel Pro。为什么选择MYSQL:数据库有很多,为什么么我选择…

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

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

win+mysql自动备份吗_Windows下mysql自动备份的最佳方案

网上有很多关于window下Mysql自动备份的方法,其实不乏一些不好的地方和问题,现总结出一个最好的方法供大家参考:新建一个记事本,然后重命名为: mysql_backup.bat 然后单击右键选择编辑,把下面的部分粘贴进来…

字符串转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解…

python递归查找_[Python]递归查找文件(最简洁)

google了一下发现大多数人都是自己实现的,其实python标准库里是有相关方法的,更简洁,而且支持pattern匹配。其实自己实现也没多难,但是一个非常重要的经验告诉我,内置方法哪怕代码跟你的一模一样都会比你自己写的快很多…

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

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

多个数据文件 mysql_mysql多实例(多个配置文件方式)

CleverCode最近在研究mysql的多实例,发现有两种方式:第一种是使用多个配置文件启动不同的进程来实现多实例。这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便。第二种是通过官方自带的mysqld_multi。使用单独的配置文件来…

mysql 5.1版本无innodb trx_MySQL 5.7: Innodb 事务子系统优化-阿里云开发者社区

MySQL5.7 : Innodb 事务子系统优化之前写了篇博客介绍了Percona Server对Read View的优化,顺带简单提到了MySQL5.7的事务子系统优化,详细见http://mysqllover.com/?p834 。 另外一篇博客http://mysqllover.com/?p1087 也有所涉及。本文总体介绍了几个和…

mysql hex 和 c_什么是MySQL HEX()函数,它与CONV()函数有何不同?

实际上,HEX()函数将十进制或字符串值转换为十六进制值。转换后,MySQL返回该十六进制值的字符串表示形式。语法HEX(Num or Str)众所周知,HEX()函数可以转换数字或字符串,因此语法中的“ Num”表示要转换为十六进制的数字&#xff0…

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…

cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...

CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储原文标题:SQL in CockroachDB: Mapping Table Data to Key-Value Storage原作者:Peter Mattis , Tamir Duberstein原文日期:Sep 16, 2015译:zif…

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

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

java开发分支_如何选择Java 的分支?

问题阐述听说Java 无所不能,从简单的手机游戏到世界500 强的官方网站都能开发,作为一名Java 的初学者,我该如何入手?专家解答自诞生之日起,Java 语言就处于不断的发展中。目前,其主要分为以下3 个分支。. J…

蚂蚁爬杆 java_java蚂蚁爬杆

import java.util.List;import java.util.ArrayList;import java.math.BigDecimal;/*-作者:volcano_hosan*-----------蚂蚁爬杆*有一根300厘米的细木杆,在第30厘米、80厘米、110厘米、160厘米、250厘米这五个位置上各有一只蚂蚁。*木杆很细,不能同时通过…