Bob*_*bst 4 sql sql-server data-warehouse
我犯了错误,运行应该对我的事实表(200M行)进行快速更新:
update dbo.primary_fact
set count_of_loan_obligors = o.n
from dbo.staging_fact f
-- notice that this is not the same table as the one in the update clause
inner join ##Obligor_Count o
on (f.time_dimension_id = o.time_dimension_id
and f.account_dimension_id = o.account_dimension_id)
Run Code Online (Sandbox Code Playgroud)
应该是:
from dbo.primary_fact f
Run Code Online (Sandbox Code Playgroud)
这样一个正确形成的更新(1天,87k账户)通常在一分钟或2分钟结束.运行12分钟后,我想知道这么长时间内发现了我的错误.
我取消了SQL Server Management Studio中的查询,据我所知,它会回滚所有可怕的(有人确认吗?)
但我更大的问题是:错误形成的查询有什么作用?
更新:取消操作最终完成,一小时39分钟后.DBA在杀戮上的速度太慢 - 同样如此.
正确形成的更新在8秒内完成.
第二次更新:在SSMS中成功取消订单后,原始(错误)更新中未设置任何值.我会解释这意味着任何挂起的更新都会被回滚.
但我更大的问题是:错误形成的查询有什么作用?
它将dbo.primary_fact.count_of_loan_obligors使用相同的值更新所有行.该值将是一些值##Obligor_Count.n.很难弄清楚会是什么价值.
这是一个小测试,基本上做你做的:
declare @T1 table (ID int)
declare @T2 table (ID int)
insert into @T1 values (0)
insert into @T1 values (0)
insert into @T2 values (2)
insert into @T2 values (1)
update @T1
set ID = T2.ID
from @T2 as T2
select *
from @T1
Run Code Online (Sandbox Code Playgroud)
结果:
ID
2
2
Run Code Online (Sandbox Code Playgroud)
在这种情况下@T1,使用第一行更新@T2.
| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |