Oracle 中count(1) 和count(*) 的区别
count()与count(*)比较:
如果你的数据表没有主键,那么count()比count(*)快
如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快
如果你的表只有一个字段的话那count(*)就是最快的啦
count(*) count() 两者比较。主要还是要count()所相对应的数据字段。
如果count()是聚索引,id,那肯定是count()快。但是差的很小的。
因为count(*),自动会优化指定到那一个字段。所以没必要去count(?),用count(*),sql会帮你完成优化的
count详解:
count(*)将返回表格中所有存在的行的总数包括值为null的行,然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入).
distinct 列名,得到的结果将是除去值为null和重复数据后的结果
----------------------------------------------------------------------------------------------------------------
举例演示如下:
SQL> create table test
(
ename varchar2(),
sal number()
);
表已创建。
SQL> insert into test values('fxe1',);
已创建 行。
SQL> insert into test(ename) values('fxe2');
已创建 行。
SQL> insert into test(ename) values('fxe3');
已创建 行。
SQL> insert into test(ename) values('fxe4');
已创建 行。
SQL> insert into test values('fxe5',);
已创建 行。
SQL> insert into test values('fxe6',);
已创建 行。
SQL> select * from test;
ENAME SAL
---------- ----------
fxe1
fxe2
fxe3
fxe4
fxe5
fxe6
SQL> select count(*) from test;
COUNT(*)
----------
SQL> select count(sal) from test;
COUNT(SAL)
----------
SQL> select count(distinct sal) from test;
COUNT(DISTINCTSAL)
------------------
SQL> select distinct sal from test;
SAL
----------
- 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
Oracle 中count(1) 和count(*) 的区别的更多相关文章
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
- Oracle中Blob和Clob类型的区别与操作
Oracle中Blob和Clob类型 1.Oracle中Blob和Clob类型的区别 BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的 ...
- Oracle中Union与Union All的区别(适用多个数据库)
Oracle中Union与Union All的区别(适用多个数据库) 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或 ...
- Oracle中 (+)与left join 的用法区别
Oracle中 (+)与left join 的用法区别 原创 2017年01月11日 13:33:42 6648 select * from a,b where a.id=b.id(+); (+)写在 ...
- Oracle中rank() over, dense_rank(), row_number() 的区别
摘自:http://www.linuxidc.com/Linux/2015-04/116349.htm Oracle 中 rank() over, dense_rank(), row_number() ...
- Oracle中Null与空字符串' '的区别
含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...
- Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述
--varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...
- oracle中int类型和number类型区别
INT类型是NUMBER类型的子类型.下面简要说明:(1)NUMBER(P,S)该数据类型用于定义数字类型的数据,其中P表示数字的总位数(最大字节个数),而S则表示小数点后面的位数.假设定义SAL列为 ...
- ORACLE 中rownum和row_number()的使用区别(可指定取sql结果集的第几个数据)
这篇文章主要介绍了oracle中rownum和row_number()的使用方法以及区别和联系,十分的详细,有需要的小伙伴可以参考下. row_number()over(partition by ...
- (转)在oracle中varchar和varchar2有什么区别?
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节: 2.VARCHAR2把空串等同于null处理,而varchar仍 ...
随机推荐
- SQLite数据库的基本操作
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产 ...
- js-一种去掉数组中重复元素的方法
思路来源于某个同学的博客 function norepeat(arr){ return arr.filter(function(val,index,array) { return array.inde ...
- 基于Token的身份验证——JWT
初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符 ...
- 研究dotnet动态语言IronPython(对应Java的Groovy)
Java的标配动态语言Groovy,两者搭配可以说是完美!大规模运用的项目,如:Jenkins,通过动态语言可以弥补先天系统缺陷的bug,再者就是加强自己的业务逻辑等. 那么换过dotnet上,对应的 ...
- Ext FileSystem Family、Ext2、Ext3
catalog . 简介 . Ext2文件系统 . Ext3文件系统 . 小结 1. 简介 VFS虚拟文件系统接口和数据结构构成了一个框架,各个文件系统的实现都必须在框架内运转,但这并不要求每个文件系 ...
- C++ 之const Member Functions
Extraction from C++ primer 5th Edition 7.1.2 The purpose of the const that follows the parameter lis ...
- 和redis谈一场恋爱(第二天约会了解彼此)
最近使用了Memcache,带来的便利已经让我欣喜若狂.开启了另一种又快又好的方式存储和读取数据.中间经过了一番折腾,学习了mysql,终于有学到了redis. Redis的全名是Remote Dic ...
- bootstrap学习总结-01 环境准备
1 下载Bootstrap Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.当前下载的Bootstrap版本为v3.3.7 htt ...
- C++ Primer Plus读书笔记
第五章 循环和关系表达式 1. 2.类别别名: (1) #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成 flo ...
- 一键搭建vpn服务器
今天花了很多时间搭建vpn服务器,后来找到一篇一键搭建服务器的文章,那叫一个爽,附上链接收藏~~~看开以后要写脚本了 http://www.centoscn.com/image-text/instal ...