楼主: zengmuansha

count(1) count(*) count(name) 区别和性能?

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
21#
发表于 2011-5-13 22:35 | 只看该作者
原帖由 srzyhead 于 2011-5-13 10:11 发表


count(1)的1可以理解为伪列的话,那select * from ** order by 1 这个1应该怎么理解

order by后面出现的常数被解释为返回结果列的序号。
如果是分析函数中的ORDER BY常数则还是解释为常数,相当于没有写。

使用道具 举报

回复
论坛徽章:
1
22#
发表于 2011-6-8 13:32 | 只看该作者
学习了!

使用道具 举报

回复
论坛徽章:
66
现任管理团队成员
日期:2011-05-07 01:45:08版主9段
日期:2013-04-21 02:21:02ITPUB年度最佳版主
日期:2014-02-19 10:05:27ITPUB年度最佳版主
日期:2013-01-30 17:30:25ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05优秀写手
日期:2013-12-18 09:29:15元宝章
日期:2015-02-10 19:57:54金牌徽章
日期:2015-02-10 19:59:42银牌徽章
日期:2015-02-10 19:59:42铜牌徽章
日期:2015-02-10 19:59:41
23#
发表于 2011-6-8 22:12 | 只看该作者
来玩玩,看见了看见了几个大师。呵呵

使用道具 举报

回复
论坛徽章:
14
2009新春纪念徽章
日期:2009-01-04 14:52:28沸羊羊
日期:2015-03-04 14:51:52优秀写手
日期:2014-03-14 06:00:13马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蜘蛛蛋
日期:2012-06-27 21:08:142012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
24#
发表于 2011-6-10 12:48 | 只看该作者
原帖由 newkid 于 2011-5-12 21:51 发表
"count(1) 选择表的第一个字段来统计"
这个说法是错的。和COUNT(*)没有任何区别。

"count(*) 选择整行来统计"
也是错的,如果有非空索引比如主键,它会选择代价最小的一个索引来计数。

可是OO的试验数据证实了楼主的说法,如何解释?

[ 本帖最后由 yulihua49 于 2011-6-10 12:49 编辑 ]

使用道具 举报

回复
longxiang58 该用户已被删除
25#
发表于 2011-6-10 17:15 | 只看该作者
这有什么好比较的,三个count性能是基本没有区别的。

使用道具 举报

回复
论坛徽章:
22
咸鸭蛋
日期:2011-05-24 09:43:08紫蛋头
日期:2012-03-07 10:09:01灰彻蛋
日期:2012-03-07 10:09:01迷宫蛋
日期:2012-03-07 10:09:01蛋疼蛋
日期:2012-03-07 10:09:01复活蛋
日期:2012-03-07 10:09:01生肖徽章2007版:鼠
日期:2012-03-07 10:14:44ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19奥运会纪念徽章:篮球
日期:2012-10-16 05:37:52本田
日期:2014-01-19 20:29:21
26#
发表于 2011-6-10 17:36 | 只看该作者
原帖由 newkid 于 2011-5-12 21:51 发表
"count(1) 选择表的第一个字段来统计"
这个说法是错的。和COUNT(*)没有任何区别。

"count(*) 选择整行来统计"
也是错的,如果有非空索引比如主键,它会选择代价最小的一个索引来计数。



受教学习了...

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
27#
发表于 2012-7-2 11:39 | 只看该作者
路过,来学习了···

使用道具 举报

回复
论坛徽章:
0
28#
发表于 2012-7-2 13:26 | 只看该作者
本帖最后由 skydl 于 2012-7-2 13:27 编辑

COUNT({ * | [ DISTINCT | ALL ] expr }) [ OVER (analytic_clause) ]

Link: http://docs.oracle.com/cd/E11882 ... s039.htm#SQLRF00624

If you specify expr, then COUNT returns the number of rows where expr is not null. You can count either all rows, or only distinct values of expr.

------------------------------------
count(1) 中的1仅仅是表达式并不是第一个字段的含义。1 总是不为null,所以此写发跟count(*)是一样的。

使用道具 举报

回复
论坛徽章:
7
咸鸭蛋
日期:2011-06-30 12:39:29ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:46咸鸭蛋
日期:2012-06-12 16:27:26马上有对象
日期:2014-04-28 20:10:27乌索普
日期:2018-03-15 13:56:21技术图书徽章
日期:2018-03-19 18:10:41
29#
发表于 2012-7-2 14:59 | 只看该作者
说白了 count(1)(*)统计的是行数

count(col)统计的是该字段数

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-03-18 06:00:19
30#
发表于 2012-7-3 15:43 | 只看该作者
dingjun123 发表于 2011-5-12 23:05
count(*)和count(1)无区别,有区别估计也是7i,8i时代的东西,如果有索引,并且索引列非空,那么可以走索引 ...

晕死了,,怎么看的每个帖子都有你,   一个兔子跑啊跑的,,,晕啊。。。。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表