T-SQL更新明显慢于选择或插入

时间:2016-11-09 12:48:18

标签: sql-server tsql sql-server-2008-r2

我有一个复杂的查询,我从超过700,000行中选择。该查询返回varchardate

如果我select结果在2分钟内运行。如果我insert他们进入一个新表,这需要大约相同的时间。如果我执行update,则需要1小时。

更新查询类似于以下内容:

UPDATE
    BD
SET
    datetext = V1.datetextvalue,
    datedate = V1.datevalue
FROM
    datatable AS BD
    LEFT JOIN
    aview1 AS V1
    ON BD.indexa = V1.indexa

数据表是:

primaryKey int
indexa int
datetext varchar(max) NULL
datedate datetime NULL

,而primaryKey除了没有索引。 inedxa是一个独特的价值。

我该怎么做才能加快速度?

更新

以上是对实际查询和支持视图的粗略简化。执行计划非常复杂,几乎无法读取。对我而言,关键问题是select非常快,而且更新速度很慢。

我使用查询创建临时表 - 这很快。但是,如果我从临时表更新主表,那就慢了。

1 个答案:

答案 0 :(得分:1)

您可以尝试将事务日志条目保持在最低限度,以便您的更新速度更快。尝试批量更新,如下所示。

 UPDATE TOP(1000) BD
 SET
    datetext = V1.datetextvalue,
    datedate = V1.datevalue
FROM datatable AS BD
    LEFT JOIN
    aview1 AS V1
    ON BD.indexa = V1.indexa
 WHILE  @@rowcount > 0
 BEGIN
     UPDATE TOP(1000) BD
 SET
    datetext = V1.datetextvalue,
    datedate = V1.datevalue
FROM datatable AS BD
    LEFT JOIN
    aview1 AS V1
    ON BD.indexa = V1.indexa
 END;
 GO