select * 和select 1,select count(*)和select count(1)
目录
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)相关推荐
- select count(*)和select count(1)
一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键的話 ...
- select count(*)和select count(1)的区别
一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的 假如表沒有主键(Primary key), 那么count(1)比count(*)快, 如果有主键的話 ...
- 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 ...
- select count(*) 和 select count(1) 以及 select count(column) 的区别
考试,目的在于让自己明白,自己天天写的都是垃圾 select count(*) 和 select count(1) 以及 select count(column) 的区别 1.如果表沒有主键, 那么c ...
- 论证select count(*)和select count(1)
今天看到同事转载的一篇<select count(*)和select count(1)的区别>的博文,兴致所致,就想对文中提出的结论进行验证一下: 从内容来看,主要是有主键和没有主键的影响 ...
- mysql count里select_select count()和select count(1)的区别和执行方式讲解
在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数.很多人其实对这三者之间是区分不清的.本文会阐述这三者的作用,关系以及背后的原理. 往常我经常 ...
- select 1,select *,select count(),select sum(),select null
select 1 from dual where a >20 查询后返回1列,所返回的列值均为1,返回的行数等于满足条件的行数: 同理, select 常量 from - where -,查询后 ...
- select count(1) 、select count(*) 、select count(字段)的区别、及性能
select count(*) from teacher; //11 select count(1) from teacher; //11 select count(id) from teacher; ...
- 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(列名) 的查询结 ...
最新文章
- JavaScript中的字符串操作(转)
- SolrCloud6.1.0之SQL查询测试
- selenium之 chromedriver版本对照表
- Python Requests 丨爬虫基础入门
- Kernel启动时 驱动是如何加载的module_init,加载的次序如何;略见本文
- linux无法ping通localhost
- win7中竟然没有telnet.exe??
- linux安装wine运行.exe文件
- 第11章从 Web 抓取信息
- HDS VSP/VM高端存储更换硬盘
- QQ空间说说批量删除
- 想要穷游北京?这些湖光山色的地方人少还景美!
- UOJ#449 喂鸽子
- 蓝牙技术|AirPods Pro 2 支持蓝牙 LE Audio 技术带来的 5 大好处
- 简单电脑版微信双开方法多开bat分身代码教程
- Python中for循环的使用
- 逗号分隔 整形 数字 输入 读取方法 C++
- Highlight_Matching_Pair问题解决
- 铁路工程词汇-中英对照
- yum安装ifconfig