Ale*_*xei 1 teradata rowlocking table-locking
我正在开发一个从 Teradata DWH 获取一些数据的应用程序。LOCK ROW FOR ACCESSDWH 开发人员告诉我在所有查询之前使用SELECT,以避免延迟对该表的写入。
由于非常熟悉 MS SQL Servers 的WITH(NOLOCK)提示,我认为LOCK ROW FOR ACCESS它是等效的。但是,INSERTorUPDATE语句不允许使用LOCK ROW FOR ACCESS(我不清楚为什么会失败,因为它应该应用于语句选择的表,而不是我插入的表):
-- 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
Run Code Online (Sandbox Code Playgroud)
我已经看到LOCKING TABLE ... FOR ACCESS可以使用它,但不清楚它是否符合我的需要(NOLOCK等效 - 不阻止写入)。
问题: 在语句中进行选择时,应该使用什么提示来最大程度地减少写入延迟INSERT?
您不能LOCK ROW FOR ACCESS在 INSERT-SELECT 语句上使用。INSERT 语句将在其写入的表上放置一个写锁,并在其选择的表上放置一个读锁。
如果绝对必须使用LOCK ROW FOR ACCESSINSERT-SELECT,那么请考虑创建一个如下视图:
CREATE VIEW tmpView_PersistentTable AS
LOCK ROW FOR ACCESS
SELECT Cols FROM PersistentTable;
Run Code Online (Sandbox Code Playgroud)
然后从视图中执行 INSERT-SELECT:
INSERT INTO SomeVolatile
SELECT Cols FROM tmpView_PersistentTable;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13887 次 |
| 最近记录: |