gpt4 book ai didi

mysql - Oracle 数据库 - count(0) 是否比 rownum < 500 运行得更快

转载 作者:搜寻专家 更新时间:2023-10-30 20:17:13 25 4
gpt4 key购买 nike

我想优化数据库中的某个查询,如果结果 > 500,则不要运行该查询。

这两个中最快的方法是什么:

1)

list = createNativeQuery("select count(0) from (select * from table where rownum <= 501)")
if(list.size() > 500) throw error;
else runQuery();

或 2)

list = createNativeQuery("select * from table where rownum <= 501")
if(list.size() > 500) throw error;

与实际获取所有行并计算结果大小相比,计数查询是否总体上更快并且经过优化以运行得更快?

编辑:在第一种情况下,如果 count(0) 返回 size < 500,那么我必须重新运行查询,在我的例子中,我有一个复杂的 where 子句。如果我的子查询需要大约 10 秒,那么在场景 1 中它将需要大约 20 秒)。我的问题是,如果子查询需要 ~10s,子查询中的 select count(0) 是否需要,例如~1s 因为 oracle 的索引和优化?

最佳答案

第一种方法更好,因为您不选择从表到客户端的行在 SQL Plus 中看到这个:

第一:

SQL> SET AUTOTRACE ON STATISTICS
SQL> select count(0) from (select * from all_tables where rownum <= 501);

COUNT(0)
----------
501


Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
1606 consistent gets
0 physical reads
0 redo size
423 bytes sent via SQL*Net to client
419 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

第二:已选择 418 行。

select * from table where rownum <= 501;
Statistics
----------------------------------------------------------
9 recursive calls
0 db block gets
855 consistent gets
0 physical reads
0 redo size
25012 bytes sent via SQL*Net to client
716 bytes received via SQL*Net from client
29 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
418 rows processed

SQL>

注意字节数

423 in 1st approach vs 25012 in 2nd

第三我不确定你项目的逻辑,但也许

select count(*) from all_tables

是获取行数最简单的方法,如果它是 >501,则根本不要运行查询

SQL> select count(*) from all_tables;

COUNT(*)
----------
1711


Statistics
----------------------------------------------------------
8 recursive calls
0 db block gets
2557 consistent gets
0 physical reads
124 redo size
423 bytes sent via SQL*Net to client
419 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

SQL>

关于mysql - Oracle 数据库 - count(0) 是否比 rownum < 500 运行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33516853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com