oracle中count(1)和count(*)之间的区别

用户名

通过多种资源,书籍和Asktom,我发现count(1)之间没有区别count(*)我发现某个地方count(1)某个地方count(*)但是我真的不知道怎么办?至于我所知道的count(*)计数rowidcount(1)计数1作为行数。既然rowid是18位字符,是否需要更多时间?据我所知,大小是2还是38,速度无关紧要。

你们任何人都可以消除我的疑问。

伊尔森

我相信count(1)以前在旧版本的Oracle中会更快。但是到现在为止,我很确定优化器足够聪明,足以知道这一点,count(*)并且count(1)意味着您需要行数并创建适当的执行计划。

干得好:

create table t as select * from all_objects;

Table T created.

create index tindx on t( object_name );

Index TINDX created.

select count(*) from t;

  COUNT(*)
----------
     21534

select * from table(dbms_xplan.display_cursor( NULL, NULL, 'allstats last' ));

Plan hash value: 2940353011

--------------------------------------------------------------------------------------------------
| Id  | Operation             | Name  | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |
--------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       |      1 |        |      1 |00:00:00.01 |     100 |     93 |
|   1 |  SORT AGGREGATE       |       |      1 |      1 |      1 |00:00:00.01 |     100 |     93 |
|   2 |   INDEX FAST FULL SCAN| TINDX |      1 |  18459 |  21534 |00:00:00.01 |     100 |     93 |
--------------------------------------------------------------------------------------------------

select count(1) from t;

  COUNT(1)
----------
     21534

Plan hash value: 2940353011

-----------------------------------------------------------------------------------------
| Id  | Operation             | Name  | Starts | E-Rows | A-Rows |   A-Time   | Buffers |
-----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |       |      1 |        |      1 |00:00:00.01 |     100 |
|   1 |  SORT AGGREGATE       |       |      1 |      1 |      1 |00:00:00.01 |     100 |
|   2 |   INDEX FAST FULL SCAN| TINDX |      1 |  18459 |  21534 |00:00:00.01 |     100 |
-----------------------------------------------------------------------------------------

因此,不仅知道它可以使用索引来优化此查询非常聪明,而且针对不同版本使用了完全相同的执行计划(该计划的价值是相同的)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MongoDB中count()和find()。count()之间的区别

在表中查找 NaN 行时 count() 和 sum() 之间的区别

select count(*)from和select count('quoted string')之间的区别

count [name.charAt(i)] ++和count [str1.charAt(i)-'a'] ++之间的确切区别是什么?

MySQL 中 SUM() 和 COUNT() 的区别

在SQL中,count(column)和count(*)有什么区别?

MongoDB中cursor.count()和cursor.size()之间的区别

使用Python层时,Caffe Blob中的`num`和`count`参数之间有什么区别?

用户和Oracle中的架构之间的区别?

SQL oracle中NVL和OR之间的区别

pandas 数据框混淆了 .count 和 .sum 之间的区别

count = count + n&1 和 count += n&1 之间的差异

Python中“ for a [-1] in”和“ for a in a”之间的区别?

multiprocessing.cpu_count和os.cpu_count之间的区别

1>和>之间的区别

dd的命令选项bs = 1024 count = 1和bs = 1 count = 1024有什么区别

MySQL查询中EXPLAIN,count(1)和表内容之间的差异

高阶函数中count ++和count + 1的差异

python中的len()和count()有什么区别?

Oracle中N'String'和U'String'文字之间的区别

Oracle中“视图”和“同义词”之间的区别

Oracle Sql中的“!=”和“ <>”之间有什么区别?

Oracle中.pls和.sql文件之间的实际区别

Oracle中的Views和With ... as子句之间有什么区别?

!a ==-1和a!=-1之间的区别

Oracle中的SUM(COUNT())

Oracle中的SUM(COUNT(*))

反向和[::-1]之间的区别

使用COUNT(*)和INTO Oracle SQL