首页
学习
活动
专区
圈层
工具
发布

MySQL count()函数及其优化count(1),count(*),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(*)

4.5K60

MySQL查询---COUNT函数

所以上一篇主要提到了几种可以优化分页的方案,而且分页业务一般都伴随着需要count函数查询总条数,所以本篇文章主要讲讲count函数的一般优化方案。 为什么分页一般要伴随查询数量?...我个人建议使用count(*),因为SQL92标准中制定count(*)为标准统计行数的语法,所以Mysql一直在不断地对count(*)做一定的优化。那有人说count(id)效率会不会更高?...而count(*)刚才说过会默认寻找最小字段的索引优化查询,所以我们给表增加一个status字段,弄成tinyint类型,并且添加二级索引,然后测试count(*)执行时间: ?...所以说我们在需要取整表行数的时候就可以给表加一个非空的tinyint类型字段,并且添加二级索引,count(*)就会使用这个二级索引,优化查询速度。...很显然,本次查询走索引了,加速查询的原因是什么呢?因为我们在name字段创建了一个二级索引,在无二级索引时,count操作只能全表检索数据。

4.9K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Mysql COUNT() 函数详解

    下面开始说今天的正文内容...在使用Mysql的时候,作为开发者,聚合函数是肯定会用到的,下面就来说说我们常用到的统计行数的聚合函数 COUNT()。...COUNT() 的几种用法说到COUNT() 函数,最常用的几种方法就是 COUNT(*) 、COUNT(1)、 COUNT(column),那么关于这几种 COUNT() 函数的不同之处这里就来详细说说...下面我们再利用 COUNT(1) 来统计 sys_post表的数据量,其实 COUNT(1) 和 COUNT(*) 差不多,统计表中满足条件的所有数据行数,包括 NULL和重复项,比如SELECT COUNT...(1) FROM sys_post;统计结果如图所示,和我们上面使用 COUNT(*)的统计结果是一样的,也是包含了NULL在内的数量COUNT(column)还有一种统计数据的方法,就是通过 COUNT...BY create_by HAVING COUNT(*)>1;统计结果如图所示到这里关于mysql 统计函数 count() 函数的一些介绍以及基本用法就说完了。

    1.3K10

    Mysql COUNT() 函数补充内容

    下面来开始今天的正文内容吧...回顾上篇上篇文章我们在介绍 Mysql count() 函数时,介绍了count(*) count(1) count(column) 在统计数据量时候的区别以及统计结果的不同...,那么今天我们来继续补充介绍count(exp)的一些用法,还是那张表 sys_post,表数据内容如下’COUNT(expr) 的用法COUNT(expr) 函数用于计算指定表达式(expr)非 NULL...这里的 expr 可以是一个列名、一个常量值、一个算术表达式、一个函数调用等。当 expr 的结果不为 NULL 时,该行会被计入总数。...COUNT(DISTINCT expr)COUNT(DISTINCT expr) 是 SQL 中的一个函数,用于计算指定表达式(expr)不同(唯一)非 NULL 值的数量。...与 COUNT(expr) 不同,COUNT(expr) 计算的是所有非 NULL 值的数量,而 COUNT(DISTINCT expr) 只计算不同值的数量。

    82320

    MySQL的count(*)、count(1)和count(列名)区别

    "; count(*) 2 count(1)、count(*)是检索表中所有记录行的数目,无论是否包含null值 count(1)比count(*)效率高 count(字段),检索表中的该字段的非空行数...但表做过分析后,count(1)会比count(*)的用时少些(1w以内数据量),差不太多。 若count(1)是聚合索引id,那肯定count(1)快。但差的很小。...count(1) and count(字段) count(1) 会统计表中的所有的记录数,包含字段为null 的记录 count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。...实例 create table counttest(name char(1), age char(2)); mysql> select * from counttest; +------+------+...| 16 | | c | 17 | | d | NULL | | e | | +------+------+ 8 rows in set (0.00 sec) mysql

    5.5K20

    MySQL中count(字段) ,count(主键 id) ,count(1)和count(*)的区别

    count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。...所以,count(*)、count(1)和count(主键 id) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数“字段”不为 NULL 的总个数。...注意:count(1)执行速度比count(主键 id)快的原因:从引擎返回 id 会涉及到解析数据行,以及拷贝字段值的操作。 count(*) MySQL 执行count(*)在优化器做了专门优化。...看到这里,你会说优化器就不能自己判断一下吗,主键 id 肯定是非空的,为什么不能按照 count(*) 来处理,多么简单的优化。当然 MySQL 专门针对这个语句进行优化也不是不可以。...但是这种需要专门优化的情况太多了,而且 MySQL 已经优化过 count(*) 了,你直接使用这种语句就可以了。

    4K30

    mysql面试题38:count(1)、count(*) 与 count(列名) 的区别

    函数进行数据统计时,有三种常见的用法:COUNT(1)、COUNT(*)和COUNT(列名)。...它们的区别如下: COUNT(1):在COUNT函数中使用1作为参数,表示统计行数。这种写法不会对具体的列进行操作,只会对行数进行计数。它会忽略列中的NULL值,只统计非NULL的行数。...由于不涉及具体列的操作,因此效率较高。 COUNT():在COUNT函数中使用作为参数,表示统计行数。与COUNT(1)类似,它也只关注行数而不涉及具体的列。...与COUNT(1)不同的是,COUNT()会统计包括NULL值在内的所有行数,包括那些全部列值为NULL的行。...由于需要考虑NULL值,因此相对于COUNT(1),COUNT()的性能可能稍低一些。 COUNT(列名):在COUNT函数中使用具体的列名作为参数,表示统计该列的非NULL值的数量。

    1.5K00

    Python 列表(元组)的count函数

    列表(元组)的count函数 功能 返回当前列表中某个成员的个数 用法 inttype = list.count(item) 参数 item : 你想查询个数的元素 注意事项 如果查询的成员(元素)不存在...,则返回 0 列表只会检查完整元素是否存在需要计算的内容 列表和元组的count是一致的 代码 # coding:utf-8 animals = ['小猫', '小狗', '龙猫', '小猫',...'鹦鹉', '小狗', '小兔子', '小猫'] cat = animals.count('小猫') dog = animals.count('小狗') l_cat = animals.count('...龙猫') rabbit = animals.count('小兔子') print('我家的院子里有很多小动物') print('其中小猫有 %s 只' % cat) print('小狗有 {} 只'....('小狗') l_cat = animals_tuple.count('龙猫') rabbit = animals_tuple.count('小兔子') print('我家的院子里有很多小动物') print

    1.9K20

    一文搞清楚 MySQL count(*)、count(1)、count(col) 的区别

    测试 MySQL版本:5.7.29 创建一张用户表,并插入一百万条数据,其中gender字段有五十万行是为null值的 CREATE TABLE `users` ( `Id` bigint(20)...(*) 在 MySQL 5.7.18 之前,通过扫描聚集索引来InnoDB处理 语句。...SELECT COUNT(*)从 MySQL 5.7.18 开始,通过遍历最小的可用二级索引来InnoDB处理SELECT COUNT(*)语句,除非索引或优化器提示指示优化器使用不同的索引。...count(1)和count(*)取舍 之前也不知道在哪看到的或听说的,count(1) 比count(*) 效率高,这是错误的认知。...COUNT(1)仅当第一列定义为 时才进行相同的优化NOT NULL。----来自MySQL官网 这些优化都是建立在没有where 和 group by的前提下的。

    2.2K10

    【重学 MySQL】三十、数值类型的函数

    【重学 MySQL】三十、数值类型的函数 基本函数 MySQL提供了一系列基本的数值函数,用于处理数学运算和数值转换。...角度与弧度互换函数 在处理三角函数时,经常需要在角度和弧度之间进行转换。MySQL提供了以下两个函数: 函数 用法 RADIANS(x) 将角度x转换为弧度。...三角函数 MySQL支持多种三角函数,用于计算角度(以弧度为单位)的正弦、余弦、正切等。 函数 用法 SIN(x) 返回x(弧度)的正弦值。...COT(x) 返回x(弧度)的余切值,即1/TAN(x)。 指数与对数 MySQL提供了用于计算指数和对数的函数。 函数 用法 POW(x,y),POWER(X,Y) 返回x的y次方。...LOG2(X) 返回以2为底X的对数。如果X <= 0,则返回NULL。 进制间的转换 MySQL支持将数字从一种进制转换为另一种进制。 函数 用法 BIN(x) 返回x的二进制表示,作为字符串。

    83110

    Excel的count相关函数使用

    Count函数说明 返回包含数字以及包含参数列表中的数字的单元格的个数。 利用函数 COUNT 可以计算单元格区域或数字数组中数字字段的输入项个数。 ...语法 COUNT(value1,value2,...)  value1, value2, ... 为包含或引用各种类型数据的参数(1 到 30个),但只有数字类型的数据才被计算。 ...说明 • 函数 COUNT 在计数时,将把数字、日期、或以文本代表的数字计算在内; 但是错误值或其他无法转换成数字的文字将被忽略。 ...为所要计算的值,参数个数为 1 到 30 个。在这种情况下,参数值可以是任何类型,它们可以 包括空字符 (""),但不包括空白单元格。如果参数是数组或单元格引用,则数组或引用中的空白单元格将被忽略。...如果不需要统计逻辑值、文字或错误值,请使用函数 COUNT。  COUNTBLANK 计算指定单元格区域中空白单元格的个数。

    2.6K10

    MySQL中count是怎样执行的?———count(1),count(id),count(非索引列),count(二级索引列)的分析

    详情可见MySQL查询为什么选择使用这个索引?...——基于MySQL 8.0.22索引成本计算 分析一下执行计划 在执行上述查询时,server层会维护一个名叫count的变量,然后: server层向InnoDB要第一条记录。...InnoDB找到uk_key2的第一条二级索引记录,并返回给server层(注意:由于此时只是统计记录数量,所以并不需要回表)。 由于count函数的参数是*,MySQL会将*当作常数0处理。...综上所述:   对于count(*)、count(常数)、count(主键)形式的count函数来说,优化器可以选择扫描成本最小的索引执行查询,从而提升效率,它们的执行过程是一样的,只不过在判断表达式是否为...NULL时选择不同的判断方式,这个判断为NULL的过程的代价可以忽略不计,所以我们可以认为count(*)、count(常数)、count(主键)所需要的代价是相同的。

    2.9K20
    领券