gpt4 book ai didi

triggers - Oracle Trigger 会导致性能问题吗

转载 作者:行者123 更新时间:2023-12-02 01:02:00 32 4
gpt4 key购买 nike

我的应用程序中有大约 100 多个表。大多数更新查询不会更新最后更新的时间列。有 100 多个查询,所以我有点怀疑修改所有查询以包括上次更新时间。我正在寻找的替代选项是为所有表创建一个 oracle 触发器,并在相关行更新时使用触发器更新 lastupdatedtime 字段。

我的大多数表格都有超过一百万行。 Oracle 触发器会导致任何性能问题吗?以下是我正在考虑的高级语法:

  create  OR REPLACE  trigger  TRIG_UPDATE
before update on TESTSAMPLE
for each row
declare
begin

if (updating) then
:new.last_update :=CURRENT_TIMESTAMP;
end if;
end;

谢谢!

最佳答案

对于任何一般性能问题,唯一现实的答案是在您的环境中进行尝试,并对您看到的实际性能影响进行基准测试。添加触发器会在某些环境中产生严重的性能问题,并且不会对其他环境产生可衡量的影响。我们无法确定您的系统将属于哪个类别(或者它是否会属于某种中间制度)。

添加触发器将强制为您更新的每一行执行两次 SQL 到 PL/SQL 上下文转换。对于修改相对较少行的普通 OLTP 系统,该开销可能相对较低。另一方面,对于您一次更新数百万行的普通数据仓库系统,该开销可能相当大。对于您不担心这里或那里的几毫秒的普通 OLTP 系统,触发器可能不会很重要。另一方面,如果您非常关注横向扩展或者您有非常严格的服务级别协议(protocol),那么添加触发器可能会产生问题。

从功能的角度来看,您还应该知道,如果您使用触发器而不是如果将 last_update 修改添加到 UPDATE 语句,则相同的 last_update 值。这可能与您相关,也可能不相关,但需要注意这一点。

作为旁注,似乎没有任何理由在您的代码中包含 if (updating) 语句。如果您正在编写一个 before update 触发器,您将始终进行更新,因此检查您是否正在进行更新实际上没有意义。

关于triggers - Oracle Trigger 会导致性能问题吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27534872/

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