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仍 ...
随机推荐
- 回合对战制游戏第一篇(初识java)
回合对战制游戏第一篇 一,所谓的java. java是一门完全面向对象的编程语言,而之前所接触到的C语言是一门面向有一个过程的语音,对于两个的区别应该有一个清楚的认识. java的第一个内容. 类和对 ...
- [bzoj1854][SCOI2010]游戏
Description 一个装备有两个属性,一个装备只能被使用一次,一次使用一种属性.攻击boss时需按属性1.属性2.属性3...属性k的顺序使用,问k最大为多少. Input 输入的第一行是一个整 ...
- linux命令语法格式
一.命令的一般格式 command [option]... [argument]... command [options] [arguments] 具体说明: 1.command: 表示命令的名称,如 ...
- PHP扩展编写、PHP扩展调试、VLD源码分析、基于嵌入式Embed SAPI实现opcode查看
catalogue . 编译PHP源码 . 扩展结构.优缺点 . 使用PHP原生扩展框架wizard ext_skel编写扩展 . 编译安装VLD . Debug调试VLD . VLD源码分析 . 嵌 ...
- Discuz! X upgrade/converter GETSHELL Vulnerability Via /convert/include/global.func.php Inject Special Symbol Into /convert/data/config.inc.php
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对于PHP应用来说,处于用户的输入并正确划定"数据-代码"边界 ...
- linux: shell常用指令归纳
1.软件安装方式: 1)源码安装: ~ wget xxxxxx ~ ./configure ~ make ~ make install 2) yum: ~ yum search : 查找软件包 ~ y ...
- Visual Studio 2013小技巧
Ctrl + F10 可以直接运行到光标处,而不用F10 逐过程 F11 逐语句了 当有多个断点时,按F5可以切换到下一个断点.
- wireshark过滤语法总结-重点偏移过滤
http://chenjiji.com/post/3371.html 作者: CHAN | 发布: 2013 年 10 月 24 日 做应用识别这一块经常要对应用产生的数据流量进行分析. 抓包采用wi ...
- Python基本数据类型之tuple
一.创建元组: ages = (11, 22, 33, 44, 55) ages = tuple((11, 22, 33, 44, 55)) 元组和列表几乎一样 元组的元素不可修改,但是元组元素的元素 ...
- 最近在 OS-10.9下配置opencv, cgal, latex, qt, pillow
其实我之前使用的Mac os的版本是10.8的雪豹,可是最近想体验一下Mac os10.9新版本,于是就开始更新Mac os,经过10多个小时的下载和成功安装后,发现之前的配置全乱了,首先是发现lat ...