问题描述:
b表数据根据键值,将a表数据更新。发现效率特别低,语句如下。
a表7万,b表80万,有索引,执行总时间2分15秒,内部c表查询执行时间7s。b表TableScan花费60%时间,
为什么更新会花费这么多时间?
UPDATE a
SET a.Meth = c.Meth
FROM
a,
(
SELECT
ResID AS ResID,
ResType AS ResType,
COUNT (DISTINCT(ResID)) AS Meth
FROM
b
GROUP BY
ResID
ResType
) c
WHERE
a.ResID = c.ResID
AND a.ResType = c.ResType
将c表提出来,作为一个临时表,再进行更新,执行总时间8s。
SELECT
* INTO #c
FROM
(
SELECT
ResID AS ResID,
ResType AS ResType,
COUNT (DISTINCT(ResID)) AS Meth
FROM
b
GROUP BY
ResID ResType
) c;
UPDATE a
SET a.Meth = #c.Meth
FROM
a,
#c
WHERE
a.ResID = #c.ResID
AND a.ResType = #c.ResType;
DROP TABLE #c;