目录

1、select * 和select 1

2、select count(*)和select count(1)


1、select * 和select 1

语法:select * from 表名称;

查询出表的所有数据,是返回所有行的所有列,性能比select 1差。

语法:select 1 from 表名称;

查询出结果是所有记录数的常量,性能比select *高;对应所有行,返回的永远只有一个值,即常量,所以正常只会用来判断是否有还是没有。

如果要返回数据,使用select * ,如果要判断有没有结果使用select 1;

2、select count(*)和select count(1)的区别

语法:select count(*) from 表名称;

count(*) 表示所有记录,这个返回值是否为空都会计算总数

语法:select count(1) from 表名称;

count(1) 1表示主键,统计主键列(主键肯定非空的)

一般情况下,select count(*)和select count(1)两个返回的结果是一样的。在数据记录都不为空的时候查询出来结果上没有差别的。但当count(1)查询的那列有空的时候空的是要被去掉的不计入统计中。这样查询出来的结果是不一样的。

1、执行效率上:

他们之间根据不同情况会有些许区别,MySQL 会对count(*)做优化。

  • 如果表中只有一列,则count(* )效率最优。
  • 如果表有多列,且存在主键,count (列名)效率最优,顺序是:count (列名)>count (1) >count( *)。
  • 如果表有多列,且不存在主键,则count(1 )效率优于count( *)

2、从执行结果来说:

  • count(1)和count (*)之间没有区别,因为count (*) count (1)都不会去过滤(排除)空值
  • count (列名)会过滤空值。

使用count()聚合函数的注意事项:

阿里巴巴开发手册:

【强制】不要使用 count(列名)或 count(常量)来替代 count(*)count(*)是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。

// SQL92是数据库的一个ANSI/ISO标准。它定义了一种语言(SQL)以及数据库的行为(事务、隔离级别等)。

1、如果在开发中需要用到count()聚合,那么优先考虑count(*),因为mysql本身对于count(*)做了特别的优化处理

列名为主键,count(列名)会比count(1)快

列名不为主键,count(1)会比count(列名)快

如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)

如果有主键,则 select count(主键)的执行效率是最优的

如果表只有一个字段,则 select count(*)最优

2、使用count()聚合函数后,最好不要跟where age = 1;这样的条件,会导致不走索引,降低查询效率。除非该字段已经建立了索引。使用count()聚合函数后,若有where条件,且where条件的字段未建立索引,则查询不会走索引,直接扫描了全表。

3、count(字段),非主键字段,这样的使用方式最好不要出现,因为它不会走索引。


主键的作用:

  • 保证实体的完整性;
  • 加快数据库的操作速度
  • 在表中添加新记录时,数据库会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
  • 数据库自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

主键不是非要不可,可以从这两个角度权衡是否需要主键:

  • 是否满足业务要求
  • 数据查询效率(主键可以提高查询效率,当然合理的索引替代也可以)

参考:

COUNT函数的使用_数据库count函数的用法_秃头也是强的博客-CSDN博客

count(*) count(1)与count(字段)的区别_count(1)与count(*)区别_丿剑过血洒泪轻吟的博客-CSDN博客

select * 和select 1,select count(*)和select count(1)相关推荐

  1. select count(*)和select count(1)

    一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键的話 ...

  2. select count(*)和select count(1)的区别

    一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键的話 ...

  3. mysql select count() count(1)_select count()和select count(1)的区别和执行方式讲解

    select count()和select count(1)的区别和执行方式讲解 发布时间:2020-09-06 13:26:14 来源:脚本之家 阅读:227 作者:CODETC 在SQL Serv ...

  4. select count(*) 和 select count(1) 以及 select count(column) 的区别

    考试,目的在于让自己明白,自己天天写的都是垃圾 select count(*) 和 select count(1) 以及 select count(column) 的区别 1.如果表沒有主键, 那么c ...

  5. 论证select count(*)和select count(1)

    今天看到同事转载的一篇<select count(*)和select count(1)的区别>的博文,兴致所致,就想对文中提出的结论进行验证一下: 从内容来看,主要是有主键和没有主键的影响 ...

  6. mysql count里select_select count()和select count(1)的区别和执行方式讲解

    在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理. 往常我经常 ...

  7. select 1,select *,select count(),select sum(),select null

    select 1 from dual where a >20 查询后返回1列,所返回的列值均为1,返回的行数等于满足条件的行数: 同理, select 常量 from - where -,查询后 ...

  8. select count(1) 、select count(*) 、select count(字段)的区别、及性能

    select count(*) from teacher; //11 select count(1) from teacher; //11 select count(id) from teacher; ...

  9. mysql中对一个表的id建立了唯一索引,那么查询的select count(*) ,select count(1) ,select count(id),select count(列名)

    1.mysql中对一个表的id建立了唯一索引,那么查询的select count(*) ,select count(1) ,select count(id),select count(列名) 的查询结 ...

最新文章

  1. JavaScript中的字符串操作(转)
  2. SolrCloud6.1.0之SQL查询测试
  3. selenium之 chromedriver版本对照表
  4. Python Requests 丨爬虫基础入门
  5. Kernel启动时 驱动是如何加载的module_init,加载的次序如何;略见本文
  6. linux无法ping通localhost
  7. win7中竟然没有telnet.exe??
  8. linux安装wine运行.exe文件
  9. 第11章从 Web 抓取信息
  10. HDS VSP/VM高端存储更换硬盘
  11. QQ空间说说批量删除
  12. 想要穷游北京?这些湖光山色的地方人少还景美!
  13. UOJ#449 喂鸽子
  14. 蓝牙技术|AirPods Pro 2 支持蓝牙 LE Audio 技术带来的 5 大好处
  15. 简单电脑版微信双开方法多开bat分身代码教程
  16. Python中for循环的使用
  17. 逗号分隔 整形 数字 输入 读取方法 C++
  18. Highlight_Matching_Pair问题解决
  19. 铁路工程词汇-中英对照
  20. yum安装ifconfig

热门文章

  1. PHP数组转换成字符串并增加逗号分隔实例
  2. 阿里云学生云服务器的购买与连接流程
  3. 2021-2022学年广州市天河省实七年级第一学期期中考试英语试题
  4. java的农夫养牛_面试题:农夫养牛问题
  5. 【索尼电子纸dpt rp1/cp1破解】
  6. 弱鸡养成第九天(2020.10.26)- 多人合作项目的准备工作(这个人怎么又摸鱼
  7. 【技术】天洑数据建模实施案例集锦(3)- 风力机轮毂强度快速评估
  8. Node-red开发软PLC程序?
  9. 为什么GAN不能处理离散数据?
  10. 每一次结束都是一次新的开始