[英]SQL - Update query performance for large table (900 million) records
我有一個擁有9億條記錄的數據庫表。 我處於一種情況,需要更新該表中的4個不同鍵,方法是將它們聯接到一個維度,然后將事實表的鍵設置為該維度的鍵。 我已經編寫了4種不同的SQL腳本(請參見下面的示例)來執行更新,但是問題是執行時間太長。 該查詢已經運行了20多個小時,我什至不確定它走了多長時間以及需要多長時間。 我有什么辦法可以改善此狀況,因此只需幾個小時即可完成。 添加索引會改善這一點嗎?
UPDATE f
SET f.ClientKey = c.ClientKey
FROM dbo.FactSales f
JOIN dbo.DimClient c
ON f.ClientId = c.ClientId
並注釋5-僅使用所有新的源代碼從目標表中准備主鍵,並執行一條語句。 這意味着較少的連接成本,並且只有一個連接。
可以用它來不填寫交易日志
select 1
while(@@rowcount > 0)
begin
UPDATE f
SET top (100000) f.ClientKey = c.ClientKey
FROM dbo.FactSales f
JOIN dbo.DimClient c
ON f.ClientId = c.ClientId
AND f.ClientKey != c.ClientKey
end
如果您需要更新4個不同的鍵,則一次完成所有操作
大部分成本是獲取鎖
禁用f.ClientKey,運行更新,然后重建它
如果您確定DimClient不會更改with (nolock)
但需要確保
如果您是唯一需要更新FactSales的進程,請使用Tablock Holdlock
用正確的值創建一個新表。 然后添加索引和約束。 刪除現有表並將新表重命名為現有的一對一事務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.