select * 和select 1,select count(*)和select count(1)-程序员宅基地

技术标签: mysql  数据库  sql  

目录

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函数的用法_秃头也是强的博客-程序员宅基地

count(*) count(1)与count(字段)的区别_count(1)与count(*)区别_丿剑过血洒泪轻吟的博客-程序员宅基地

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_63725962/article/details/128611251

智能推荐

java截取字符串_java根据下标获取字符-程序员宅基地

文章浏览阅读1.5k次。1.根据下标截取:String str = str.substring(开始的下标,截取的长度)2.根据字符截取://截取_之前字符串:String str = str.substring(0, str.indexOf("_"));------------------------------------------------------------------//截取_之后字符串:String str = str.substring(0, str.indexOf("_"));String_java根据下标获取字符

iscsi配置_在linux操作系统上配置iscsi的服务器targetcli不小心退出了-程序员宅基地

文章浏览阅读1.7k次。一、环境配置(安装)服务器端:yum install targetcli #管理程序systemctl start target #打开服务客户端:yum install iscsi-initiator-utils #iscsi应用程序通常这个都安装过了。二、targetcli的配置服务器端: 首先要有一块需要共享的硬盘分区,这是我要共享的..._在linux操作系统上配置iscsi的服务器targetcli不小心退出了

QTreeWidget详细使用介绍_qtreewidget用法-程序员宅基地

文章浏览阅读1.1w次,点赞10次,收藏87次。QTreeWidget继承自QTreeView,是通过树形结构来展示数据结构的控件。1.QTreeWidget和QTreeView的区别QTreeView一般和相应的QXXModel合用,形成Model/View结构.QTreeView是一个视图类,你需要手动给其指定模型类,才能够显示数据。QTreeWidget继承自QTreeView,是封闭了默认Model的QTreeView,应用了模型/视图的编程方法,将数据和显示分开了。就灵活性来讲,QTreeView要灵活些。QTreewidg._qtreewidget用法

Android CameraX和SurfaceView的基本使用_camerax surfaceview-程序员宅基地

文章浏览阅读1.9k次。Jetpack CameraX 库 的 PreviewView 可以帮助您解决这一问题。通过在各种 Android 设备上提供开发者友好、一致且稳定的 API,使得展示相机的预览变得不再困难。_camerax surfaceview

链接器的奥秘:解析计算机系统中的Linker_链接器linker-程序员宅基地

文章浏览阅读310次。链接器作为计算机系统中重要的组成部分,负责将多个目标文件和库文件合并成可执行文件。它通过符号解析、地址重定位和符号重定位等步骤,完成了程序的连接和重定位工作。此外,链接器还可以进行一些优化,以提高程序的执行效率。链接器的工作原理和功能对于软件开发人员来说至关重要,在编写高效、可靠的程序时起着重要作用。希望本文能够帮助读者更好地理解和应用链接器,提升软件开发的水平。_链接器linker

qtdesigner添加菜单栏工具栏及监听事件_qtdesigner顶部导航菜单栏-程序员宅基地

文章浏览阅读5.7k次,点赞15次,收藏53次。qtdesigner添加菜单栏和工具栏_qtdesigner顶部导航菜单栏

随便推点

Qt之按钮(QAbstractButton)-程序员宅基地

文章浏览阅读1.5k次。简述QAbstractButton是按钮控件的抽象基类,提供了按钮所共有的功能。这个类实现了一个抽象的按钮。对这个按钮进行子类化可以处理用户行为,以及指定按钮如何绘制。QAbstractButton提供了点击和勾选按钮。QRadioButton和QCheckBox类只提供了勾选按钮,QPushButton和QToolButton提供了点击按钮,如果需要的话,它们还可以提供切换行为。任何按钮...

Springboot集成Lettuce完成Redis cluster集群的key过期监控-程序员宅基地

文章浏览阅读2.7k次。经过几天各种方案的对比及实验,终于完成了Springboot集成Lettuce完成Redis cluster集群的key过期监控的代码,主要参考了如下的文章及代码:https://my.oschina.net/u/4134799/blog/3116221/printhttps://github.com/xfearless1201/api/blob/master/src/mai...

Vuex介绍&同步取值&异步问题_vuex同步异步获取数据的区别-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏9次。前言:我们在之前就有了子类与父类之间的传参,又有利用总线进行传参,但两者都有一定的弊端。如:总线定义组件太多容易混淆等;所以接下来我们会利用VueX进行参数传。目录一:VueX简介一:VueX简介官方解释:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。可以想象为一个“前端数据库”(数据仓库), 让其在各个页面上实现数据的共享包括状态,并且可操作 Vuex分成五个部分: 1.State:单一状态树 2.Getters:状态获取 3..._vuex同步异步获取数据的区别

servlet返回数据的方法_servlet 返回值-程序员宅基地

文章浏览阅读2.6w次,点赞2次,收藏17次。servlet返回数据的方法方法1. RequestDispatcher.forward()界面跳转 HttpSession session =request.getSession(); Object obj = session.getAttribute (LoginConstants.LOGIN_USER); if (null !=..._servlet 返回值

golang string 去最后一个字符_golang 取字符串最后一个元素-程序员宅基地

文章浏览阅读1.8w次。package mainimport ( "fmt" "strings")func main() { fmt.Println("Hello, 世界") var s string s = "333," strings.TrimRight(s, ",") fmt.Println(s) s = strings.TrimRight(s, ",") fmt.Println(s)..._golang 取字符串最后一个元素

unity的hierarchy中什么都没了。_unity报错把hierarschy没了-程序员宅基地

文章浏览阅读2.2k次。出现原因我在build游戏时发现没有安装WebGLbuild工具,安装的同时在buildPC版,unity崩了,我强退。解决方法此项目里的内容已损坏,GG,新建个项目,导入资源包。可能是出BUG了,发现从unity中open还是打不开。show in explorer,从资源管理器中打开,成功。..._unity报错把hierarschy没了

推荐文章

热门文章

相关标签