关于如何最好地更新联接表,我有些困惑。
Presentaion
id PK
Asset
id PK
PresentationAsset
presentationid
assetid
因此,当更新Presentation及其在PresentationAsset中的关联资产时,我是否首先搜索所有关系,将其删除,然后创建新的关系?
对于这种情况,最好的方法是什么?
最佳答案
至少将它们全部删除并创建新的至少是最简单的方法。毕竟,只有两个查询。
DELETE FROM PresentationAsset WHERE presentationid = 1
INSERT INTO PresentationAsset VALUES (1, 1), (1, 2), (1, 3)
假设这些确实是该表中仅有的两列(例如,没有时间戳或任何东西),我无法想象您需要将其复杂化的任何原因。
毕竟,擦除现有行并插入所有新行的替代方法是保留已经存在的行,但删除不再需要的行,然后插入新行。从本质上讲,您仍然至少要得到一个
DELETE
和一个INSERT
,因此在大多数实际应用程序中,性能应该不会有太大差异。在第一种方法中,性能甚至可能更好,因为它每次操作所需的价值检查更少。当然,如果您要处理的情况足够大,那么微小的性能差异就很重要,那么您可能希望对所有选项进行真实测试并自己衡量性能。
而且,当然,如果这些不是表中仅有的两列,则需要为要更新的行正确保留其他列的值,因此删除全部并插入new不会成为一种选择无论如何。