0
我在SQL Server中具有table1
:更新值
id start end value flag main_name
----------------------------------------------------
1 10 20.2 pending T abc
2 22 11 pending T abc
3 12.1 15 pending F abc
我有另一个表table2
:
id start end value flag main_name
-------------------------------------------------
1 10 20.2 x T abc
2 22 11 y T abc
3 12.1 15 z F abc
我想更新table1
与价值观开始和结束从table1
pending
与table2
相应的值为相同的开始和结束。
这只是一个例子,我在table1中有100k +个记录。
我写了一个更新查询:
UPDATE t1
SET t1.value = t2.value
FROM table1 t1
JOIN table2 t2 ON t1.start = t2.start AND t1.end = t2.end
AND t2.value NOT LIKE 'pending'
AND t1.value LIKE 'pending'
WHERE t1.main_name = 'abc'
AND t2.main_name = 'abc'
但这服用大量的时间!它每秒只更新3-4行! 而且我有100k +行更新。
是否有任何其他方式/查询优化来减少时间?
*注:表中包含了比“ABC”
更详细的答案可以在这里找到https://dba.stackexchange.com/questions/47134/updating-a-table-efficiently-using-join –
当你做它作为选择?如果速度很快,并且如果这是一次性操作,则可以考虑从选择的结果中创建一个新表格,转储原始表格并重命名新表格以取代它 –
@CaiusJard不是一个好选择,因为为每个main_name我不能创建另一个表 – Shubham