计算 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(*)
.
是否有一种简单的方法来获取 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(*)
.