SQL Server中count(*), count(col), count(1)的对比
原文:SQL Server中count(*), count(col), count(1)的对比

让我们先看一下BOL里面对count(*)以及count(col)的说明:

COUNT(*) 返回组中的项数。包括 NULL 值和重复项。
COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。expression
除 text、image 或 ntext 以外任何类型的表达式。不允许使用聚合函数和子查询。
*
指定应该计算所有行以返回表中行的总数。COUNT(*) 不需要任何参数,而且不能与 DISTINCT 一起使用。
COUNT(*) 不需要 expression 参数,因为根据定义,该函数不使用有关任何特定列的信息。
COUNT(*) 返回指定表中行数而不删除副本。它对各行分别计数。包括包含空值的行。

count(*),count(1),count(col) 测试对比各种查询的执行计划总结如下

count(*)和count(1)执行的效率是完全一样的。
count(*)的执行效率比count(col)高,因此可以用count(*)的时候就不要去用count(col)。
count(col)的执行效率比count(distinct col)高,不过这个结论的意义不大,这两种方法也是看需要去用。
如果是对特定的列做count的话建立这个列的非聚集索引能对count有很大的帮助。
如果经常count(*)的话则可以找一个最小的col建立非聚集索引以避免全表扫描而影响整体性能。

本文重点是提醒自己count(*)返回结果可能和count(col)结果不一致,特别是col索引情况,null可能不走索引,以后用的时候需注意了。

posted on 2015-01-26 16:23 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4250647.html

SQL Server中count(*), count(col), count(1)的对比相关推荐

  1. 如何在SQL Server中比较表

    介绍 (Introduction) If you've been developing in SQL Server for any length of time, you've no doubt hi ...

  2. SQL Server中读取XML文件的简单做法

    SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦.本文介绍在SQL Server中读取XML文件的简单做法. ...

  3. SQL Server中如何识别、查找未使用的索引(unused indexes)

    在SQL Server中,索引是优化SQL性能的一大法宝.但是由于各种原因,索引会被当做"银弹"滥用,一方面有些开发人员(甚至是部分数据库管理员)有一些陋习,不管三七二十一,总是根 ...

  4. [转] SQL Server中变量的声明和使用方法

    原文地址 SQL Server中变量的声明和使用方法 声明局部变量语法: DECLARE @variable_name DataType 其中 variable_name为局部变量的名称,DataTy ...

  5. Sql Server中判断表或者数据库是否存在

    SQL Server中判断数据库是否存在: 法(一): select * From master.dbo.sysdatabases where name='数据库名' 法(二): if db_id(' ...

  6. 十步优化SQL Server中的数据访问

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  7. 在SQL Server中分页结果的最佳方法是什么

    如果您还希望获得结果总数(在进行分页之前),那么在SQL Server 2000.2005.2008.2012中对结果进行分页的最佳方法是(性能明智的)? #1楼 最终, Microsoft SQL ...

  8. SQL Server中的几个方法和Transact SQL 常用语句以及函数[个人推荐]

    --数据操作   SELECT --从数据库表中检索数据行和列  INSERT --向数据库表添加新数据行  DELETE --从数据库表中删除数据行  UPDATE --更新数据库表中的数据  -- ...

  9. SQL Server中的事务与锁

    了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...

最新文章

  1. 每位开发人员都应铭记的10句编程谚语 (我超喜欢,转载了)
  2. “脑补”的科学依据:眼前的黑不是黑,靠得是你的大脑
  3. 当个新手很幸福!网络创业之新手小白一样可以吸粉又赚钱
  4. PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
  5. 理解C语言中指针的声明以及复杂声明的语法
  6. Mycat探索之旅(3)----Mycat的全局序列号
  7. pyspark模块介绍
  8. linux运维、架构之路-Zabbix监控
  9. Java类class isAnnotation()方法及示例
  10. Java中的垃圾回收器的类型概述 《对Java的分析总结》(六)
  11. Eclipse最新插件的下载地址大全[收集整理] zt
  12. ASP.NET 实践:使用用户控件实现 Web 部件的个性化
  13. API各函数作用简介
  14. 阿里巴巴JAVA编码规范考试
  15. MarkdownPad2安装Awesomium SDK-Windows官方链接
  16. 通达OA11.0 补丁文件
  17. 爬虫学习之17:爬取拉勾网网招聘信息(异步加载+Cookie模拟登陆)
  18. 祭奠一位我无比亲爱的亲人的离去
  19. Linux内核的misc框架
  20. 以太坊平台增加类 CrytoNote 环签名

热门文章

  1. vs2008 C++ 没有找到MSVCR90D.dll 问题
  2. 致所有IT工程师的信(网络工程师的发展方向)
  3. [转]线程安全java
  4. Dropzone.js实现文件拖拽上传
  5. 辛星和您一起手写CSS气泡
  6. CircleDisplay
  7. Apache 'mod_accounting'模块SQL注入漏洞(CVE-2013-5697)
  8. UML学习---交互
  9. frame,iframe,frameset用法和区别
  10. The restricted headers are: