计算 Oracle 查询中的行数

Calculate number of rows in an Oracle query

是否有一种简单的方法来获取 Oracle SQL 查询 returns 的行数?

我尝试了 count 各种方法,但 none 奏效了。这似乎可以解决问题

SELECT   ROWNUM, mv.*
FROM    my_view mv
where col_a IS NOT NULL
order by ROWNUM desc 

但是有没有像 R 中的 nrow 或 Python 中的 .shape 这样简单明了的东西?

SELECT   count(*) over () as row_count, mv.*
FROM    my_view mv
where col_a IS NOT NULL

会给你一个计数,但除非你能确定性能不会成为问题,否则这样做通常不是一个好主意。因为如果 table 有 10 亿行,而您只需要在屏幕上显示前(比方说)200 行怎么办?我们将访问所有候选行以计算出该计数。

这就是为什么 Google 搜索显示“结果 1..20 of ABOUT ...”

I was just wondering what the best practice would be to check the size of the view (...) I don't need to display the entire view, but only need to know the number of rows.

在那种情况下,count(*) 似乎是 的方式。纯粹而简单

SELECT count(*)
FROM my_view
WHERE col_a IS NOT NULL;

(您使用了 order by 子句;它 承诺 比没有它的查询慢。)


或者,如果它是 table(不是视图),您可以使用 非常快 选项 -查询 user_tables:

SQL> SELECT num_rows
  2    FROM user_tables
  3   WHERE table_name = 'EVID';

  NUM_ROWS
----------
    808757

table 到底有多少行?

SQL> SELECT COUNT (*) FROM evid;

  COUNT(*)
----------
    808761

SQL>

完全一样。为什么?因为您应该收集统计数据:

SQL> EXEC DBMS_STATS.gather_table_stats('SJERV', 'EVID');

PL/SQL procedure successfully completed.

现在这些值匹配:

SQL> SELECT num_rows
  2    FROM user_tables
  3   WHERE table_name = 'EVID';

  NUM_ROWS
----------
    808761

SQL>

这只是意味着您应该定期收集(架构)统计数据 - 例如,每天一次。然后你就会得到关于行数的非常接近的信息。但是,要再次 确定 您真正拥有多少行 - select count(*).