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

转载 2015年07月09日 10:57:27

<span style="font-size:18px;">count(1)与count(*)比较: 

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

count详解:

count(*)将返回表格中所有存在的行的总数包括值为null的行,然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入).
distinct 列名,得到的结果将是除去值为null和重复数据后的结果

----------------------------------------------------------------------------------------------------------------
举例演示如下:


SQL> create table test
2 (
3 ename varchar2(10),
4 sal number(4)
5 );

表已创建。

SQL> insert into test values('fxe1',90);

已创建 1 行。

SQL> insert into test(ename) values('fxe2');

已创建 1 行。

SQL> insert into test(ename) values('fxe3');

已创建 1 行。

SQL> insert into test(ename) values('fxe4');

已创建 1 行。

SQL> insert into test values('fxe5',80);

已创建 1 行。

SQL> insert into test values('fxe6',80);

已创建 1 行。

SQL> select * from test;

ENAME SAL
---------- ----------
fxe1 90
fxe2
fxe3
fxe4
fxe5 80

fxe6 80

SQL> select count(*) from test;

COUNT(*)
----------
6

SQL> select count(sal) from test;

COUNT(SAL)
----------
3


SQL> select count(distinct sal) from test;

COUNT(DISTINCTSAL)
------------------
2

SQL> select distinct sal from test;

SAL
----------
80
90

 
</span>


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
  • 5330

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

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

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

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

对于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

oracle优化之count的优化-避免全表扫描

select count(*) from t1; 这句话比较简单,但很有玄机!对这句话运行的理解,反映了你对数据库的理解深度! 建立实验的大表他t1 SQL> conn scott/tiger ...
  • AinUser
  • AinUser
  • 2017年03月13日 17:57
  • 1226

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

由于Oracle在count()的时候,并不计算null(空值)部分,所以和空值结合起来进行统计的时候还是有一些意思。        count这个函数应用的太频繁,有必要深究一番。         ...
  • yansong_8686
  • yansong_8686
  • 2013年12月11日 23:15
  • 3335

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

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

如何诊断和解决high version count

在Oracle 10g以上的版本,High version count可谓是一个臭名昭著的问题。Hight version count不仅仅产生的原因多种多样,并且会导致各种令人头痛的问题,轻导致数据...
  • notbaron
  • notbaron
  • 2016年03月18日 23:33
  • 30778

104----oracle基本概念,启动,连接, 数据类型,常见案例,集合操作符

一、           Oracle基本概念: 1)       表空间: 2)       全局数据库名: 用于区分一个数据库的内部标识;      全局数据库名=数据库名+域名     ...
  • lixiao1048
  • lixiao1048
  • 2016年07月09日 16:27
  • 258
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle 中count(1) 和count(*) 的区别
举报原因:
原因补充:

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