哪个SQL语句更好?

时间:2016-05-12 10:25:25

标签: sql sql-update

哪种陈述更好?

ViewTreeObserver.OnGlobalLayoutListener

Update tableA set field1 = @AAA
where fieldB = 12345
and fieldC = 'Ask'
and fieldA <> @AAA 

假设只有少于5行符合标准,添加fieldA&lt;&gt;是多余的@AAA?它可能会减慢搜索速度,但会过滤掉那些不需要更新的记录。所以我不知道是否应该总是添加这个条件。

2 个答案:

答案 0 :(得分:0)

您必须使用第一个查询,因为它将更新最小记录,并且不会从此查询更新不必要的行。

答案 1 :(得分:0)

两者不一样。正确的第一个查询应考虑NULL。这比听起来更麻烦:

Update tableA
    set field1 = @AAA
    where fieldB = 12345 and
          fieldC = 'Ask' and
          (fieldA <> @AAA or fieldA is null and @AAA is not null or
           fieldA is not null and @AAA is null
          );

正如评论和其他答案中所提到的,在查询表现更好的意义上,限制行数是“更好”。如果您有一个包含三列的索引(例如(fieldB, fieldC, fieldA)),则尤其如此。然后,引擎可以使用索引确定要更新的行 - 也许可以节省读取一堆行。

注意:数据库的不同之处在于,当值相同时,是否“实际”更新。也就是说,是否记录更新以及是否激活了触发器。