我们试图弄清楚几种方法之间的相对成本是多少。
我们有一个网页,人们可以在其中选择添加/保留/删除表格中的行,方法是用复选框标记它们。(人们可以向页面添加新条目,也可以查看现有条目。)
当发布到 Web 服务器时,页面会遍历条目并调用存储过程,将复选框的状态作为参数之一传递。
存储过程当前为每个条目调用一个delete
语句,后跟一个insert
if 复选框被标记。这具有简单的优点。
我们正在考虑而不是在其中放置一些if exists
逻辑来测试该行是否已经在表中。
如果是这样并且复选框被标记,我们将不理会它。否则我们会插入它。相反,如果该行不在表中并且未标记复选框,我们将跳过delete
andinsert
语句。这最大限度地减少了诸如此类的数量,deletes
但以更多的逻辑为代价。
就数据库负载而言,一种方法通常优于另一种方法吗?
调用delete
实际上不影响任何行的语句是否会产生成本,就像添加新记录时那样?这比if exists
支票更糟糕吗?
该表在所有相关列上都有索引。我假设要发布 600,000 个条目,事先检查会有很大的优势,但有问题的页面最多有 100 个条目。