Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 索引视图是否在事务期间更新?_Sql_Sql Server_Transactions_Indexed View - Fatal编程技术网

Sql 索引视图是否在事务期间更新?

Sql 索引视图是否在事务期间更新?,sql,sql-server,transactions,indexed-view,Sql,Sql Server,Transactions,Indexed View,假设我有一个SQL Server索引视图,vwIndexedView,它从两个表中读取,tbTableOne和tbTableTwo 如果对事务中的两个表中的一个执行操作,索引视图会发生什么情况?它是立即刷新的,还是我必须提交我的事务才能将结果反馈给它 例如: BEGIN TRANSACTION testTransaction INSERT INTO tbTableOne VALUES ('1', '2') SELECT * FROM vwIndexedView COMMIT TRANSACTIO

假设我有一个SQL Server索引视图,vwIndexedView,它从两个表中读取,tbTableOnetbTableTwo

如果对事务中的两个表中的一个执行操作,索引视图会发生什么情况?它是立即刷新的,还是我必须提交我的事务才能将结果反馈给它

例如:

BEGIN TRANSACTION testTransaction
INSERT INTO tbTableOne VALUES ('1', '2')
SELECT * FROM vwIndexedView
COMMIT TRANSACTION

SELECT * FROM vwIndexedView

第一个选择的结果会与第二个不同吗?

这是一个集中竞争的表吗?例如,通过为事务中的插入锁定它,您是否会导致大量其他SPID等待


简单的答案是肯定的,视图将使用新值更新,但如果您从其他位置插入这些基础表,那么这将造成一些性能问题。作为执行更新的DML语句的一部分,索引或索引视图将立即更新。在您的情况下,如果您分析INSERT的实际执行计划,您将看到它包含用于更新所有物理“分区”的运算符,并且您的索引视图就是此类分区之一。

索引视图立即刷新,您可以查看执行计划并亲自查看。这会导致大量锁争用: