触发器会降低性能吗?插入和删除的表格?

Pan*_*che 8 sql-server triggers stored-procedures

假设我有一些存储过程在表上执行插入/更新/删除操作.

根据某些标准,我想执行一些操作.

我应该创建触发器还是在存储过程本身中执行操作.

使用触发器会降低性能吗?

请问这两个表即插入的删除的存在(永久)或动态创建?

如果它们是动态创建的,则会出现性能问题.

如果它们是持久表,那么它们在哪里?

此外,如果他们exixts然后我可以访问存储过程中的插入删除表?

Joh*_*nFx 7

是的,带有触发器的表将无法像没有触发器那样运行.逻辑要求做某事比无所事事更昂贵.

我认为如果你问一下你的问题是否比你没有指定的其他方法更有效,我会更有意义.

最终,我会选择最适合工作的工具,只有在出现问题时才会担心性能问题,而不是在实施解决方案之前.

触发器中提供了已插入和已删除的表,因此从存储过程中调用它们是不行的.

  • INSERTED和DELETED是临时表,它们在执行触发器的持续时间内存在于内存中.一旦你的触发器完成执行,它们就会消失,直到其他东西导致触发器触发 (3认同)
  • 有时在进入解决方案之前考虑性能是一件好事,没有什么比深入到一个项目却意识到必须重新开始更糟糕的了 - 在您实施错误之前,选择正确的解决方案时需要考虑性能解决方案 (2认同)

HLG*_*GEM 7

它是否比在存储过程中执行相同的操作更不具备性能.可能不是只有所有性能问题,真正知道的唯一方法是用实际数据集测试两种方法(如果你有一个2,000,000记录表不用一个包含100条记录的表进行测试!)

也就是说,无论数据如何更新,删除或插入,触发器和另一种方法之间的选择完全取决于所涉行动的发生.如果这是一个必须始终发生的业务规则,那么触发器最适合它,否则最终会出现数据完整性问题.数据库中的数据经常从GUI以外的来源更改.

在编写触发器时,您应该注意几件事情.首先,触发器会为每个批次触发一次,因此无论您是插入一条记录还是100,000条记录,触发器只会触发一次.您不能假设只有一条记录会受到影响.你也不能认为它总是只是一个小的记录集.这就是编写所有触发器的关键所在,就好像要插入,更新或删除一百万行一样.这意味着基于集合的逻辑,如果可能的话,没有游标或while循环.不要将写入的存储过程写入处理一条记录并在触发器中的光标中调用它.

也不要从游标发送电子邮件,如果电子邮件服务器关闭,您不希望停止所有插入,更新或删除.


Eve*_*oob 0

表现在什么方面?触发器将在事件发生后对数据库执行更新,因此系统的用户甚至不会知道它正在发生。它发生在后台。

你的问题的措辞方式很难理解。