我正在開發一個應用程序,從Teradata DWH獲取一些數據。 DWH開發人員告訴我,在所有SELECT
查詢之前使用LOCK ROW FOR ACCESS
以避免延遲寫入該表。Teradata - 如何選擇不鎖定作家? (鎖定行訪問與鎖定表訪問)
對MS SQL Server的WITH(NOLOCK)
提示非常熟悉,我看到LOCK ROW FOR ACCESS
等效。然而,INSERT
或UPDATE
聲明不允許使用LOCK ROW FOR ACCESS
(目前尚不清楚,我爲什麼失敗,因爲它應該申請表(S)的聲明從選擇,而不是一個我插入):
-- this works
LOCK ROW FOR ACCESS
SELECT Cols
FROM Table
-- this does not work
LOCK ROW FOR ACCESS
INSERT INTO SomeVolatile
SELECT Cols
FROM PersistentTable
我已經看到可以使用LOCKING TABLE ... FOR ACCESS
,但不清楚它是否符合我的需要(NOLOCK
等效 - 不要屏蔽寫入)。
問題:我應該使用什麼提示,以儘量減少寫入延遲的INSERT
語句中進行選擇時?
使用視圖是一個很好的建議。不幸的是,我不允許執行更改,但我可以要求MDW開發人員將我訪問的表封裝爲「鎖定行以訪問」視圖。 – Alexei
@Alexei:在Teradata環境中,大多數最終用戶只能訪問包括LOCK ROW ACCESS在內的1:1視圖,因此這些視圖可能已經存在。另外,除非使用源表的PI選擇,否則LOCK ROW/TABLE之間沒有區別。 Btw,MDW =來自德國的大零售商? – dnoeth
@dnoeth - 哦,對不起。 MDW =主數據倉庫。我曾在幾家本地公司中看到過它的縮寫,我認爲這是一個已知的縮寫,但你和谷歌證明我錯了。是的,這是關於DE數據倉庫的大零售商。 – Alexei