CACHE_RESULT 或变量

问题描述 投票:0回答:1

我想知道使用变量或 RESULT_CACHE 哪个更好? 例如:

declare
  v_last_date date;
begin
  select last_date 
    into v_last_date 
    from my_table_1;

  update my_table_2 
     set col_1 = col_1 * 10 
   where col_2_date > v_last_date;

  .... same for my_table_3, my_table_4, ... my_table_100
  commit;
end;

begin
  update my_table_2 
     set col_1 = col_1 * 10 
   where col_2_date > (select /*+ RESULT_CACHE*/ last_date 
                         from my_table_1);

  .... same for my_table_3, my_table_4, ... my_table_100
  commit;
end;

谢谢你,

sql oracle plsql
1个回答
0
投票

使用变量。这准确地显示了您所做的事情:启动 PL/SQL 块时,您查看日期并在整个例程中使用它。

另一方面,缓存是一个更复杂的问题。在每个查询中,您都需要选择在 my_table_1 中在那一刻找到的日期。您可以通过使用 /+ RESULT_CACHE/ 来加快速度,但是 DBMS 仍然会搜索缓存,这不可能像简单地使用变量那么快。此外,DBMS 必须管理该缓存。如果对日期表有写访问,那么缓存就会失效。这可能意味着,当另一个进程删除不影响最大日期的旧数据时,DBMS 仍将使缓存失效以确保安全,并且必须再次运行日期查询。

使用子查询还可能意味着运行例程时日期会发生变化,并且第一个查询将使用块中最后一个查询之外的另一个日期。

© www.soinside.com 2019 - 2024. All rights reserved.