count(*),count(1)和count(主键)的区别

转载 2016年05月31日 21:45:03

不考虑Null的情况, 如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null.
count(1)和count(主键) 这两个只扫描主键Index就可以得到数据,
count(*)是扫描表的。
所以count(1)和count(主键)这两个效率高。
还有一种写法是count(ROWID)这也是只扫描Index的,效率高。

 

//http://topic.csdn.net/u/20090825/20/3622527b-afc1-4a8a-8d8a-587455b712bd.html

当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!

从执行计划来看,count(1)和count(*)的效果是一样的。
但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。
这个也与表的记录数多少有关!如果1w以外的数据量,做过表分析之后,反而count(1)的用时比count(*)多了。

另外,当数据量达到10w多的时候,使用count(1)要比使用count(*)的用时稍微少点!

如果你的数据表没有主键,那么count(1)比count(*)快
如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快
如果你的表只有一个字段的话那count(*)就是最快的啦
count(*) count(1) 两者比较。主要还是要count(1)所相对应的数据字段。
如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。
因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*),sql会帮你完成优化的  
因此:count(1)和count(*)基本没有差别!

sql调优,主要是考虑降低:consistent gets和physical reads的数量。

select count(*)、count(1)、count(主键列)和count(包含空值的列)有何区别?

下班路上看见网上有人问一个问题: oracle 10g以后count(*)和count(非空列)性能方面有什么区别? 乍一看,确实有些含糊,Oracle中往往小问题蕴含着大智慧,如何破云见日?最直...
  • bisal
  • bisal
  • 2017年02月14日 00:11
  • 2144

Select count(*)和Count(1)的区别和执行效率比较

在MySQL中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。经常会看到一些所谓的优化建议不使用Count(* )而是使用Cou...
  • see__you__again
  • see__you__again
  • 2016年03月31日 21:54
  • 2197

oracle中关于count(1)、count(*)、count(rowid)、count(某个字段)使用上的区别和性能问题

区别 count()是oracle中的聚合函数,用于统计结果集的行数。count(1)、count(*)、count(rowid)这三种使用方式的统计的行数量都会包括null行。count(某个字段...
  • fly_zxy
  • fly_zxy
  • 2016年10月12日 16:06
  • 5329

对于SQL中COUNT(1)和COUNT(*)执行效率上的误解

转自:http://blog.itpub.net/26736162/viewspace-2136339/ 如题,SQL中COUNT(1)和COUNT(*)执行效率的高低,说法不一。不过本人认为二...
  • dtjiawenwang88
  • dtjiawenwang88
  • 2017年07月04日 23:45
  • 298

count(1)和count(*)的区别

在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作用,关系以及背后的原理。   ...
  • HGodsun
  • HGodsun
  • 2016年11月19日 19:37
  • 1036

count慢的问题解决

SELECT count(*) FROM (SELECT DISTINCT DMPNN.ID AS NEED_ID, 'V2' VDMPSX, DMPNN.DMP_NUM AS DMPNN...
  • hanghangaidoudou
  • hanghangaidoudou
  • 2017年05月31日 14:20
  • 367

SQL笔记,关于select count为0的疑惑解决

下面是一个sql语句: SELECT COUNT( mid ) AS current_comment_num, user_volatile_db.user_name, user_volatile_db...
  • chongshi007
  • chongshi007
  • 2013年11月21日 18:03
  • 2055

关于使用count(X) 函数的说明(附加:关于null的说明以及和0的区别)

关于使用count(X) 函数的说明 count(X) 函数用于计算一个查询所返回的行数,但是和其他的聚合函数AVG(X), SUM(X), MAX(X), MIN(X)一样,它在统计的时候都会简单的...
  • haiross
  • haiross
  • 2013年12月05日 11:13
  • 2695

mysql count(*) 会选哪个索引?

今天在查询一个表行数的时候,发现count(1)和count(*)执行效率居然是一样的。这跟Oracle还是有区别的。遂查看两种方式的执行计划: mysql> select count(1) from...
  • u012512575
  • u012512575
  • 2015年08月18日 16:22
  • 1020

COUNT(*)与COUNT(某个字段)的区别,及count(null)和count(distinct 某字段)的用法

由于Oracle在count()的时候,并不计算null(空值)部分,所以和空值结合起来进行统计的时候还是有一些意思。        count这个函数应用的太频繁,有必要深究一番。         ...
  • yansong_8686
  • yansong_8686
  • 2013年12月11日 23:15
  • 3334
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:count(*),count(1)和count(主键)的区别
举报原因:
原因补充:

(最多只允许输入30个字)