【发布时间】:2014-06-26 15:52:36
【问题描述】:
什么更快?
update c
set
c.createdon=q.CreatedOn
,c.createdby=case when q.createdby is not null then q.createdby end
,c.modifiedon=q.modifiedon
,c.modifiedby=case when q.ModifiedBy is not null then q.ModifiedBy end
from crm_annotationbase c
join IncidentWorknote q
on c.annotationid=q.annotationid
或者这个:
update c
set
c.createdon=q.CreatedOn
,c.createdby=isnull(q.createdby,c.createdby)
,c.modifiedon=q.modifiedon
,c.modifiedby=isnull(q.modifiedby,c.modifiedby)
from crm_annotationbase c
join IncidentWorknote q
on c.annotationid=q.annotationid
我的第一个查询已经运行了 24 小时。我正在根据暂存数据更新 CRM 2013 表。
我想知道我是否选择了最有效的解决方案?
【问题讨论】:
-
如果您想优化 24 小时查询以显着加快运行速度,那么我最不想看到的就是空值检查。这实际上只是选择此查询的任意元素并将其归咎于性能问题。
-
本文详细介绍了 COALESCE 和 ISNULL 之间的性能。 COALESCE 基本上是幕后的 CASE。 sqlmag.com/t-sql/coalesce-vs-isnull
-
同意上面的说法,为什么不通过 where q.modifiedon >= GetDate() -1 来加快速度
-
你一直在更新所有的记录,你只需要更新那些已经改变的。我假设你每天都在运行它。您可以相对轻松地限制要更新的记录。
-
@MikeMiller 非常感谢你。但我不知道如何判断记录是否已更改。我只需要运行一次这个过程。
标签: sql sql-server tsql sql-server-2012 dynamics-crm-2013