【问题标题】:How much extra computational time is this Oracle query taking?这个 Oracle 查询需要多少额外的计算时间?
【发布时间】:2017-02-23 17:46:47
【问题描述】:

我正在编写一个 pl/sql 代码。请帮助计算以下两种方法的时间。

方法一:

if count(x)>1
then
  select sum(price) into vprice from table1 where x between var1 and var2;
else
  select price into vprice from table1 where x=var1;
end;

方法二:

select sum(price) from table1 where x between var1 and var2;

我们正在根据其他条件确定代码上方某处的 var1 和 var2 的值。在大约五分之四的情况下,var1 和 var2 的值将是相同的。

P.S.:请忽略任何语法或逻辑错误。我试图了解我的程序中发生了什么,以了解提高效率的更好方法。

【问题讨论】:

  • 你不能测试一下吗?
  • Method1 似乎根据某个值执行两个查询之一。 if count(x)>1 不是有效的 PL/SQL,我知道你说过要忽略它,但我不知道它想做什么。 Method2 似乎类似于 Method1 中的第一个查询。这两种“方法”与“计算时间”有什么关系,无论是什么,都不清楚。
  • 我假设您问的是使用 = 而不是 between(如果有)所节省的成本是否被额外的 PL/SQL 逻辑所抵消,以决定遵循哪个分支?

标签: sql plsql oracle11g


【解决方案1】:
EXPLAIN PLAN FOR select sum(price) from table1 where x between var1 and var2;
SELECT * FROM TABLE (dbms_xplan.display); -- take this output and compare it to the next one

EXPLAIN PLAN FOR select price from table1 where x=var1;
SELECT * FROM TABLE (dbms_xplan.display); -- compare it to this output

【讨论】:

【解决方案2】:
DECLARE
    tsStartTime TIMESTAMP;
    tsEndTime TIMESTAMP;
BEGIN
    -- Start the timer
    tsStartTime := CURRENT_TIMESTAMP;
    DBMS_OUTPUT.PUT_LINE(tsStartTime);

    -- DO SOMETHING HERE WHICH YOU WANT TO TIME <------

    -- Display some information, and how long "something" took
    tsEndTime := CURRENT_TIMESTAMP;
    DBMS_OUTPUT.PUT_LINE(tsEndTime);

    DBMS_OUTPUT.PUT_LINE('Time elapsed:' || to_char(tsEndTime - tsStartTime));
END;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多