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()聚合函数的注意事项:

阿里巴巴开发手册:

 

 

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博客

  • 15
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值