我有一张桌子,它经过了一堆步骤,然后需要自行清理。我想在截断之前将此表中的值复制到另一个表中。我不会详细说明,但这是有充分理由的。
我试图找出最好的方法来做到这一点。我看到的两个选项是:
- 每次我插入/更新第一个表时,对第二个表执行相同的操作。
-一旦第一次完成,在它被截断之前,将它全部复制到第二个表中。
就性能而言,任何一种策略都比另一种更好吗?我没有太多的SQL经验,所以我没有任何想法。
我有一张桌子,它经过了一堆步骤,然后需要自行清理。我想在截断之前将此表中的值复制到另一个表中。我不会详细说明,但这是有充分理由的。
我试图找出最好的方法来做到这一点。我看到的两个选项是:
- 每次我插入/更新第一个表时,对第二个表执行相同的操作。
-一旦第一次完成,在它被截断之前,将它全部复制到第二个表中。
就性能而言,任何一种策略都比另一种更好吗?我没有太多的SQL经验,所以我没有任何想法。
在不了解您的设置和瓶颈所在的情况下,不可能回答哪种策略对性能更好。数据输入/输出?记录 I/O?日志空间?维护窗口长度?“更好的性能”可以意味着“尽可能快”,也可以意味着“尽可能少的资源”。您提出的问题没有普遍适用的答案。
不过,一些谷歌面包屑可能会对您有所帮助:您的第一个表称为“暂存表”,第二个表称为“审核表”。关于它们的性能和设计存在很多讨论。您可能会找到与您的设置和要求相近的一种。
第二个选项在性能(批量插入)方面要好得多,因为您的表在操作开始之前将是空的,那么您需要做的就是 a Insert - select *
,它将所有您的记录插入到第二个表中。
我个人会选择选项#1。插入时,请执行两次。它使事情变得更容易,您不必稍后运行大量查询来复制它。