我有一个复杂的查询,我从超过700,000行中选择。该查询返回varchar
和date
。
如果我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
非常快,而且更新速度很慢。
我使用查询创建临时表 - 这很快。但是,如果我从临时表更新主表,那就慢了。
答案 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