2010-08-26 57 views
0

当触发性能更好时?例如。当触发器性能更好时?

我有一个插入,然后一个更新,从一个表(其中执行插入)计算总行数并将值保存在另一个表中。

但我在想,而是从PHP运行更新,使触发器执行该操作。

什么时候有用?什么时候没用?

回答

4

当涉及到性能时,触发器和过程可能比外部系统快得多,因为它们在数据库内部,因此不需要在任何地方发送数据。

是否使用它们,在什么情况下通常是架构选择。即它们在系统的所有设计中如何可维护,如果客户想要升级甚至更改数据库系统会怎么样。

所以你首先必须决定什么是设计的优先级,然后才能决定是否使用它们。例如,如果你有大量的数据,速度是最重要的问题,那么触发器和程序可能是一个好主意。但是如果可移植性,可维护性和集中式业务逻辑是设计中最重要的特性,那么你很可能不会需要它们。

另一种选择是查看诸如休眠的抽象以将数据库实现与您的软件分离。

3

触发器不用于性能 - 它们用于在不使用存储过程,函数或检查约束的情况下进行操作。

他们被认为是必要的罪恶。因为它们不是表格声明的一部分,所以在调试时经常会忽略触发器 - 非常令人烦恼。

我想的是运行更新从PHP做出触发器来执行该操作。

这会比在触发器或存储过程中执行操作更糟糕,因为这意味着从应用程序到数据库的额外行程。

+0

是的,但他可以编写触发器来执行他想要的某些DBMS。我似乎记得能够用Postgresql做一些非常复杂的触发器。 其实FK限制是触发器,我不认为它们是一个必要的邪恶。一些权衡更多的强大功能。 顺便说一下,FKs的限制通常会阻止许多错误,至少对我来说是这样。 – 2010-08-26 01:23:19

+0

@Adam Gent:我从不推荐触发器作为我的第一个选项;它是一个工具,就像一个光标,只应该谨慎使用。 – 2010-08-26 01:26:57

+0

我认为你为正确的工作选择了正确的解决方案。所以在某些情况下,它可能是您的第一选择。 – 2010-08-26 01:29:16

0

我将不得不想象触发更快,但我没有原始基准。 它会更快的原因是因为限制了客户的不安。

相关问题