技术标签: 【知识梳理】
转自: https://www.cnblogs.com/CareySon/p/DifferenceBetweenCountStarAndCount1.html
在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作用,关系以及背后的原理。
往常我经常会看到一些所谓的优化建议不使用Count(* )而是使用Count(1),从而可以提升性能,给出的理由是Count( *)会带来全表扫描。而实际上如何写Count并没有区别。
Count(1)和Count(*)实际上的意思是,评估Count()中的表达式是否为NULL,如果为NULL则不计数,而非NULL则会计数。比如我们看代码1所示,在Count中指定NULL(优化器不允许显式指定NULL,因此需要赋值给变量才能指定)。
DECLARE @xx INT
SET @xx=NULL
SELECT COUNT(@xx) FROM [AdventureWorks2012].[Sales].[SalesOrderHeader]
代码清单1.Count中指定NULL
由于所有行都为NULL,则结果全不计数为0,结果如图1所示。
图1.显而易见,结果为0
因此当你指定Count(*) 或者Count(1)或者无论Count(‘anything’)时结果都会一样,因为这些值都不为NULL,如图2所示。
图2.只要在Count中指定非NULL表达式,结果没有任何区别
对于Count(列)来说,同样适用于上面规则,评估列中每一行的值是否为NULL,如果为NULL则不计数,不为NULL则计数。因此Count(列)会计算列或这列的组合不为空的计数。
前面提到Count( )有不为NULL的值时,在SQL Server中只需要找出具体表中不为NULL的行数即可,也就是所有行(如果一行值全为NULL则该行相当于不存在)。那么最简单的执行办法是找一列NOT NULL的列,如果该列有索引,则使用该索引,当然,为了性能,SQL Server会选择最窄的索引以减少IO。
我们在Adventureworks2012示例数据库的[Person].[Address]表上删除所有的非聚集索引,在ModifyDate这个数据类型为DateTime的列上建立索引,我们看执行计划,如图3所示:
图3.使用了CreateDate的索引
我们继续在StateProvinceID列上建立索引,该列为INT列,占4字节,相比之前8字节 DateTime类型的列更短,因此SQL Server选择了StateProvinceID索引。如图4所示。
图4.选择了更短的StateProvinceID索引
因此,如果某个表上Count(*)用的比较多时,考虑在一个最短的列建立一个单列索引,会极大的提升性能。
零知识证明 - ZKP算法属性可表示为: zk-SNARKs (简洁的非交互式零知识证明)Zero-KnowledgeSuccinctNon-interactiveARgument of Knowledge关键词见证人: 执行电路时产生的中间信号 - witness零知识证明证明您知道一组匹配所有约束的信号(见证),而不会泄露除公共输入和输出之外的任何信号。生成 provi...
一.合并数据集pandas对象中的数据可以通过一些内置的方式进行合并:1)pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来。SQL或其他关系型数据库的用户对此应该会比较熟悉,因为它实现的就是数据库的连接操作。2)pandas.concat可以沿着一条轴将多个对象堆叠到一起。3)实例方法combine_first可以将重复数据编接在一起,用一个对象中的值填充另一个对象...
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是第一款Cortex-M微控制器。1.天生荣耀:ARM Cortex-M处理器由来 ARM公司自2004年推出ARMv7内核架构时,摒弃了以往"ARM+数字"这种处理器命名方法(ARM11之前的处理器统称经典处理器系列),重新启用Cortex来命名,并将Cortex系列细分为三大类:Cortex-A系列:面向性能密集型...
linux递归查询目录文件How to sort all the files in a directory and subdirectories recursively by modification time on Linux? 如何在Linux上按修改时间对目录和子目录中的所有文件进行递归排序? You can make use of find (GNU find, or plus stat...
chrome连接已重置Google recently launched a new tool in the fight against crapware and spyware, and it’s an excellent start to helping clean up a computer that has been infected with nonsense like the Ask T...
LOGFONT是Windows内部字体的逻辑结构,主要用于设置字体格式,其定义如下:<br />typedef struct tagLOGFONTA<br />{<br />LONG lfHeight;<br />LONG lfWidth;<br />LONG lfEscapement;<br />LONG lfOrientation;<br />LONG lfWeight;<br />BYTE lfItalic;<br />BYTE lfUnderline;<br />BYTE lfStrikeOut;<
内部错误2753.regutils.dll(2013-01-02 14:17:38)标签:杂谈对于在java在安装过程中遇到的此类问题有个较好的解决方法。如果你用的是Windows操作系统,那么微软的清理工具软件(WindowsInstaller CleanupTool)是很有用的,我建议你首先使用该软件来清理一下你的机器。如果该软件不起作用,请遵照以下步骤,这样就可以安装一个全新版本的Java...
思路参考:点击打开链接单调递增最长子序列时间限制:3000 ms | 内存限制:65535 KB难度:4描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4输入第一行一个整数0随后的n行,每行有一个字符串,该字符串的长度不会超过10000输出输出字符串的最长递增子序列的长度样例输入3aaaababcabk
Linux安装JDK-配置环境(详细图解)今天博主更新一篇关于Linux安装JDK-配置环境(详细图解)。不喜勿喷,欢迎关注,如有建议欢迎补充,讨论。1 系统任意位置,右键—在终端中打开1.1 su root(切换root账号,否则很多操作没有权限进行)1.2 java -version(查看系统自带openJDK版本)1.3 rpm -qa | grep java (查看相关ja...
https://www.cnblogs.com/21207-iHome/p/6894128.html比较经典,以便以后参考。
新安装好的CentOS 7无法上外网但是可以ping通同一网段的IP地址修改/etc/sysconfig/network-scripts/ifcfg-enp0s3文件,需要修改的内容如下蓝色所示vim /etc/sysconfig/network-scripts/ifcfg-enp0s3TYPE=Ethernet<font color=#87CEEB>BOOTPROTO=static</fon
http://web.mit.edu/kerberos/krb5-1.5/krb5-1.5.4/doc/krb5-admin/Kerberos-V5-Library-Error-Codes.html#Kerberos-V5-Library-Error-CodesProtocol error codes are ERROR_TABLE_BASE_krb5 + the protocol e