我正在开发一个应用程序,从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