UPDATE的速度会更快:COALESCE(字段,值)或WHERE字段为空

时间:2013-01-23 04:56:51

标签: sql sql-server sql-update coalesce

什么查询应该更快

UPDATE table1
SET field1 = COALESCE(field1, someValue)
WHERE foreignKeyField = someKeyValue

UPDATE table1
SET field1 = someValue
WHERE foreignKeyField = someKeyValue AND field1 is null

在MS SQL Server中?它取决于什么?

2 个答案:

答案 0 :(得分:1)

ISNULL将减少开销,取决于NULL条件,我想。以下是COALESCE与ISNULL对比IS NULL的测试比较或 - http://blogs.x2line.com/al/archive/2004/03/01/189.aspx

另外,请查看此博客中的Performance comparion:ISNULL vs. COALESCE http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/performance-isnull-vs-coalesce.aspx说:

  

ISNULL看起来非常一致地超越了COALESCE   平均为10%或12%。

答案 1 :(得分:0)

好吧,首先让我说明你的查询有两种不同的含义。更新table1并将field1设置为等于某些东西,即使它是NULL,也不等于仅在field1为NULL时更新表。您对更新的意图是什么?

Fiddle为例:

SELECT Field FROM Test WHERE Field IS NULL;
SELECT COALESCE(Field,'') FROM Test;

第一个查询返回单个记录,第二个返回2个记录。

您可能想知道:

的表现
SELECT COALESCE(Field,'') FROM Test;
SELECT ISNULL(Field,'') FROM Test;

虽然我没有测试过,但ISNULL的效率要高20-30%。

希望其中一些有帮助。祝你好运。