我想在两个表中插入相同的数据。什么是最好的 - 一个sp中的两个insert语句或一个表中的insert,并在同一个表上插入触发器以在第二个表中插入数据。
哪个查询会提高我的性能并避免表中的死锁?
提前谢谢你......
答案 0 :(得分:0)
对于必须强制执行,传播内容或无法直接处理所有情况的情况,触发器应该是脱节的。
它们并不是DML的主要途径。
可以说,如果您不能使用存储过程,或者一个表是“隐藏”或审计表,则可以使用触发器。但是如果它是主要的逻辑,你就有能力把它包装在一个SP中,考虑隐藏逻辑是否合适,看不见是不可能的。
避免使用触发器以避免编写冗余逻辑。这会混淆细节。
就你的表现问题而言,它是相同的。没有性能优势。
答案 1 :(得分:-1)
一个SP中的两个插入在任何给定的日期都更好,因为在这种情况下,创建触发器所涉及的开销是不必要的。 根据MySQL存储过程编程,第256页下的头部" Trigger Overhead"说以下内容:
重要的是要记住,必要时,触发器会增加开销 到它们适用的DML语句。实际数量 开销将取决于触发器的性质,但是 - 就像所有 MySQL触发器执行FOR EACH ROW ---开销可以快速进行 累积处理大量行的语句。您 因此,应避免放置任何昂贵的SQL语句或 触发器中的程序代码。
第529-531页给出了触发开销的扩展说明。该部分的结论点如下:
这里的教训是这样的:因为触发器代码将执行一次 受DML语句影响的每一行,触发器都很容易变成 DML性能中最重要的因素。里面的代码 触发器主体需要尽可能轻量级 - 并且 - 特别是 - 应该支持触发器中的任何SQL语句 索引尽可能。