0

这可能是一个简单的问题,但我对此很陌生。我正在尝试使用以下命令在 sql server 中设置列​​:

update myTable 
set myCol = a.col 
from table2 as a 
where a.col_1 = col_1 and a.col_2 = col_2;

myTable 大约有 1.5 亿行。和 table2 大约 300,000 行。我已正确索引 table2,因此查找速度很快。我分别在一百万行上尝试了这个,大约花了 20 秒。但是整张桌子花了很长时间,现在两天多了,还没有完成。我想知道是否有更好的解决方案。

提前致谢。

4

2 回答 2

1

我认为UPDATE语句的语法应该是

UPDATE  b 
SET     b.myCol = a.col 
FROM    myTable b
        INNER JOIN table2 a
            ON  a.col_1 = b.col_1 AND
                a.col_2 = b.col_2

并且您需要INDEX在两个表上的 (col_1, col_2) 上提供化合物。

于 2013-02-04T10:00:22.567 回答
0

试试这个:

update myTable 
set myTable.myCol = (select a.col from table2 as a 
                     where a.col_1 = myTable.col_1 and 
                     a.col_2 = myTable.col_2
                    )

或者如果这不起作用,可能是因为您的加入标准的真正唯一性存在问题。

改为尝试:(这应该是快速的鞭打鲷鱼......但证明您的数据很可能处于不一致的状态。)

update myTable 
set myTable.myCol = (select top 1 a.col from table2 as a 
                     where a.col_1 = myTable.col_1 and 
                     a.col_2 = myTable.col_2
                    )
于 2013-02-04T10:09:52.633 回答