首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

2.5K30

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

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

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

    MySQL|查询字段数量多少对查询效率的影响

    一、问题由来 我们知道执行计划的不同肯定会带来效率的不同,但是在本例中执行计划完全一致,都是全表扫描,不同的只有字段个数而已。...到这里我们大概知道了,查询的字段越多那么这里转换的过程越长,并且这里都是实际的内存拷贝,而非指针指向。...对第一条数据进行 where 过滤(MySQL 层) 拿到数据后当然还不能作为最终的结果返回给用户,我们需要在 MySQL 层做一个过滤操作,这个条件比较位于函数 evaluate_join_record...三、回到问题本身 好了到这里我们大概知道全表扫描的访问数据的流程了,我们就来看看一下在全表扫描流程中字段的多少到底有哪些异同点: 不同点: 构建的 read_set 不同,字段越多 read_set...中为 '1' 的位数越多 建立的模板不同,字段越多模板数量越多 每行数据转换为 MySQL 格式的时候不同,字段越多模板越多,那么循环转换每个字段的循环次数也就越多,并且这是每行都要处理的。

    5.8K20

    MySQL中 如何查询表名中包含某字段的表

    (base table 指基本表,不包含系统表) table_name 指具体的表名 如查询work_ad数据库中是否存在包含”user”关键字的数据表 select table_name from...如何查询表名中包含某字段的表 select * from systables where tabname like 'saa%' 此法只对Informix数据库有用 查询指定数据库中指定表的所有字段名column_name...= 'd_ad'; 如何查询mysql数据库中有多少张表 select count(*) TABLES, table_schema from information_schema.tables where...table_schema = ‘test’ group by table_schema; mysql中查询到包含该字段的所有表名 SELECT TABLE_NAME FROM information_schema.COLUMNS...WHERE COLUMN_NAME='字段名' 如:查询包含status 字段的数据表名 select table_name from information_schema.columns where

    12.7K40

    MySQL 百万数据量的 count(*) 查询如何优化?

    明确需求 对这个问题有兴趣是源于一次开发中遇到要统计人数的需求。类似于“得到”专栏的订阅数。 但是我的数据量比这个大很多,而对数据的准确性要求就不那么高。所以首先要明确需求。...数据量大/准确性要求低/请求量大 这种场景一般是C端产品,比如上面说的得到APP的订阅数目,如果对一致性要求不高,可以直接在内存中使用缓存,用guava在内存中做一个缓存定时刷新即可,百万量级count...遍历整个表,把主键值拿出来,累加; count(1)。遍历整个表,但是不取值,累加; count(非空字段)。遍历整个表,读出这个字段,累加; count(可以为空的字段)。...遍历整个表,读出这个字段,判断不为null累加; count(*)。遍历整个表,做了优化,不取值,累加。 结合mysql的一些索引查询知识,我们可以大致得出如下结论。 ?...建议直接使用count(*)。 相关阅读 为什么要用自增主键? 蚂蚁金服面试题: 一条SQL查询语句如何执行的 索引使用策略及优化

    13.1K41

    Mysql如何查字段的长度,Mysql中length()、char_length()的区别

    谁知道,人家的数据不符合标准,要删除了重新搞,那么你如何将超长的数据删除呢,或者将超长的数据查询出来。   ...答:剧透一下,其实使用char_length()查询出来的,就可以把这些删除掉,然后将调大的字段长度调小就行了。备注,我实际操作的字段都是中文字符哈,别再写教程写出血案了。 ?...2、先了解一下,Mysql中length()、char_length()的区别。 1)、length():mysql里面的length()函数是一个用来获取字符串长度的内置函数。   ...1)、MySQL 5.0.3 之前:0--255字节,如:varchar(20)中的20表示字节数,如果存放utf-8编码的话只能放6个汉字。varchar(n),这里的n表示字节数。     ...utf-8编码中判定某个字段为全英文,length(字段) = char_length(字段)即可。 ?

    4.5K10

    mysql sum函数中对两字段做运算时有null时的情况

    背景 在针对一些数据进行统计汇总的时候,有时会对表中的某些字段进行逻辑运算,如加减乘除,如果要求和的话还可能会用到sum函数,如果两者结合起来应该怎么处理,如果参与运算的字段中出现null值的时候会出现一些什么情况...InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 数据如下 如上表所示,用户信息表中有账户总金额和冻结金额字段...根据表中的数据,我们知道统计后正确的结果应该是 (2000 - 50) + (1500 - 100) + (500 - 50) + 1000 = 4800 但如果我们这么写,那么得到的结果是错误的。...1000而是null,因为null与任何值比较和运算的结果都是null,所以我们应该针对null做特殊处理。...需要主要这样写也是没有用的,因为里面1000-null,仍然是一个错误的结果 select ifnull(sum(total_amount - freeze_amount),0) from user

    1K10

    【MySQL】面试官:如何查询和删除MySQL中重复的记录?

    写在前面 最近,有小伙伴出去面试,面试官问了这样的一个问题:如何查询和删除MySQL中重复的记录?相信对于这样一个问题,有不少小伙伴会一脸茫然。那么,我们如何来完美的回答这个问题呢?...今天,我们就一起来探讨下这个经典的MySQL面试题。 问题分析 对于标题中的问题,有两种理解。第一种理解为将标题的问题拆分为两个问题,分别为:如何查询MySQL中的重复记录?...如何删除MySQL中的重复记录?另一种理解为:如何查询并删除MySQL中的重复记录? 没关系,不管怎么理解,我们今天都要搞定它!! 为了小伙伴们更好的理解如何在实际工作中解决遇到的类似问题。...这里,我就不简单的回答标题的问题了,而是以SQL语句来实现各种场景下,查询和删除MySQL数据库中的重复记录。...vitae group by peopleId,seq having count(*) > 1) 4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 delete from vitae

    5.9K10

    sql语句_ 的三种去重方法

    注:这里的去重是指:查询的时候, 不显示重复,并不是删除表中的重复项,关系删除表中重复数据的sql 请参考一下链接: https://www.cnblogs.com/171207xiaohutu/p/11520763...中的结果(1) select  name,id from userinfo  groub by name ,id 运行上面3行sql的结果如上面distinct的结果(2) 3. row_number...4.思考 distinct 和group by 的区别: (1)distinct常用来查询不重复记录的条数:count(distinct name),group by 常用它来返回不重记录的所有值。...(2)在使用group by 分组后,在select中可以选择分组字段,和非分组字段的函数值,如 max()、min()、sum、count()等 distinct 和row_number over()...区别: (1)distinct 和 row_number over 都可以实现去重功能,而distinct 作用于当行的时候,其"去重" 是去掉表中字段所有重复的数据,作用于多行的时候是,其"去重"所有字段都相同的数据

    1.1K10

    谈谈执行一条SQL的流程

    使用到了缓存,就涉及到对缓存维护,Mysql中的缓存检测程序会监测到缓存涉及的每一张表,如果表中的数据或者结构发生改变,如执行了insert、alter等命令时,那么它会将该表对应的缓存进行失效和删除。...** 2.2.2、语法解析     如果请求没有命中缓存,则进入到语法解析的步骤,因为服务端程序接收到的是客户端发送过来的文本信息,Mysql服务端程序要从文本中将具体的请求含义解析出来,如查询什么字段...3、存储引擎模块   经过了连接处理和解析优化俩步骤后,实际上还是没有对实际的数据进行任何的处理,Mysql中,将对数据存储和提取的操作抽取到了一个叫存储引擎的模块中。   ...(5)、groub by: 根据携带的条件,将临时表t2进行相应的数据分组,并形成临时表t3,如果语句包含了group by则它后面的字段必须出现在select中或者出现在聚合函数中,否则会报SQL语法错误...(6)、count等聚合函数: 对临时表进行指定字段的聚合函数操作,形成临时表t5。   (7)、having: 筛选分组后临时表t3的数据,得到临时表t4。

    62220

    如何对MySQL数据库中的数据进行实时同步

    通过阿里云数据传输,并使用 dts-ads-writer 插件, 可以将您在阿里云的云数据库RDS for MySQL中数据表的变更实时同步到分析型数据库中对应的实时写入表中(RDS端目前暂时仅支持MySQL...前提条件 您需要在您RDS for MySQL所在的云账号下开通阿里云数据传输服务。...服务器上需要有Java 6或以上的运行环境(JRE/JDK)。 操作步骤 1. 在分析型数据库上创建目标表,数据更新类型为实时写入,字段名称和MySQL中的建议均相同; 2....,需要重启进程 4)RDS for MySQL中DDL操作不做同步处理; 5)更新app.conf需要重启插件进程才能生效; 6)如果工具出现bug或某种其它原因需要重新同步历史数据,只能回溯最近24小时的数据...配置监控程序监控进程存活和日志中的常见错误码。 logs目录下的日志中的异常信息均以ErrorCode=XXXX ErrorMessage=XXXX形式给出,可以进行监控,具体如下: ?

    5.7K110
    领券