Oracle 中count(1) 、count(*) 和count(列名) 函数的区别

1)count(1)与count(*)比较:

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

2)count详解:

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

3)举例演示如下:

 1  -- 创建test表
 2  SQL> create table test
 3  (
 4  ename varchar2(10),
 5  sal number(4)
 6  );
 7 
 8 -- 向test表中插入数据
 9 SQL> insert into test values('fxe1',90);
10 SQL> insert into test(ename) values('fxe2');
11 SQL> insert into test(ename) values('fxe3');
12 SQL> insert into test(ename) values('fxe4');
13 SQL> insert into test values('fxe5',80);
14 SQL> insert into test values('fxe6',80);
15 
16 SQL> select * from test; -- 查询test表中的所有数据
17 ENAME      SAL
18 ---------- ----------
19 fxe1        90
20 fxe2
21 fxe3
22 fxe4
23 fxe5        80
24 fxe6        80
25 ---------- ----------
26 27 SQL> select count(*) from test; -- count(*):包含NULL,一共6条记录 28 COUNT(*) 29 ---------- 30 6 31 32 SQL> select count(1) from test; -- count(1):包含NULL,一共6条记录,和count(*)的结果一样 33 COUNT(1) 34 ---------- 35 6 36 37 SQL> select count(sal) from test; -- count(列名):不包含NULL,但包含重复值项,一共3条记录 38 COUNT(SAL) 39 ---------- 40 3 41 42 SQL> select count(distinct sal) from test; -- count(列名):不包含NULL,去重“count(distinct sal)”,一共2条记录 43 COUNT(DISTINCTSAL) 44 ------------------ 45 2 46 47 SQL> select distinct sal from test; 48 SAL 49 ---------- 50 80 51 90

 

 

本文转载于:http://blog.csdn.net/szstephenzhou/article/details/8446481

 

 

作者:DSHORE

出处:http://www.cnblogs.com/dshore123/

欢迎转载,转载务必说明出处。(如果本文对你有用,可以点击一下右下角的 推荐,谢谢!

 

 
 
G
M
T
 
检测语言世界语中文简体中文繁体丹麦语乌克兰语乌兹别克语乌尔都语亚美尼亚语伊博语俄语保加利亚语僧伽罗语克罗地亚语冰岛语加利西亚语加泰罗尼亚语匈牙利语南非祖鲁语卡纳达语印地语印尼巽他语印尼爪哇语印尼语古吉拉特语哈萨克语土耳其语塔吉克语塞尔维亚语塞索托语威尔士语孟加拉语宿务语尼泊尔语巴斯克语布尔语(南非荷兰语)希伯来语希腊语德语意大利语意第绪语拉丁语拉脱维亚语挪威语捷克语斯洛伐克语斯洛文尼亚语斯瓦希里语旁遮普语日语格鲁吉亚语毛利语法语波兰语波斯尼亚语波斯语泰卢固语泰米尔语泰语海地克里奥尔语爱尔兰语爱沙尼亚语瑞典语白俄罗斯语立陶宛语索马里语约鲁巴语缅甸语罗马尼亚语老挝语芬兰语苗语英语荷兰语菲律宾语葡萄牙语蒙古语西班牙语豪萨语越南语阿塞拜疆语阿尔巴尼亚语阿拉伯语韩语马其顿语马尔加什语马拉地语马拉雅拉姆语马来语马耳他语高棉语齐切瓦语 世界语中文简体中文繁体丹麦语乌克兰语乌兹别克语乌尔都语亚美尼亚语伊博语俄语保加利亚语僧伽罗语克罗地亚语冰岛语加利西亚语加泰罗尼亚语匈牙利语南非祖鲁语卡纳达语印地语印尼巽他语印尼爪哇语印尼语古吉拉特语哈萨克语土耳其语塔吉克语塞尔维亚语塞索托语威尔士语孟加拉语宿务语尼泊尔语巴斯克语布尔语(南非荷兰语)希伯来语希腊语德语意大利语意第绪语拉丁语拉脱维亚语挪威语捷克语斯洛伐克语斯洛文尼亚语斯瓦希里语旁遮普语日语格鲁吉亚语毛利语法语波兰语波斯尼亚语波斯语泰卢固语泰米尔语泰语海地克里奥尔语爱尔兰语爱沙尼亚语瑞典语白俄罗斯语立陶宛语索马里语约鲁巴语缅甸语罗马尼亚语老挝语芬兰语苗语英语荷兰语菲律宾语葡萄牙语蒙古语西班牙语豪萨语越南语阿塞拜疆语阿尔巴尼亚语阿拉伯语韩语马其顿语马尔加什语马拉地语马拉雅拉姆语马来语马耳他语高棉语齐切瓦语     
 
 
 
文本转语音功能仅限200个字符
 
 选项 : 历史 : 反馈 : Donate关闭

转载于:https://www.cnblogs.com/dshore123/p/7878310.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值