对UNION ALL使用READ UNCOMMITTED

枪手

我有一个正在开发中的存储过程,带有多个UNION ALL语句。这是历史数据,已指示我使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED暂时不讨论这是否是正确的方法,我想知道是否只需要在存储过程的顶部指定一次此ISOLATION LEVEL,或者是否需要在每个UNION ALL之后都指定它,因为它们是不同的查询吗?

例子:

Alter procedure dbo.ExampleProcedure as
declare @StartDate datetime
declare @EndDate datetime
insert into myDB.DBO.InboundCalls

select I.Date, I.System, Count(*) as calls
from
(select Date, System, CallID from System1CallData C
Left Join someothertables as S on C.CallID = S.CallID
where (C.date >= @StartDate and C.date < @EndDate)) as I
Group by I.Date, I.System

Union ALL

select I.Date, I.System, Count(*) as calls
from
(select Date, System, CallID from System2CallData C
Left Join someothertables as S on C.CallID = S.CallID
where (C.date >= @StartDate and C.date < @EndDate)) as I
group by I.Date, I.System

Union ALL

select I.Date, I.System, Count(*) as calls
from
(select Date, System, CallID from System3CallData C
Left Join someothertables as S on C.CallID = S.CallID
where (C.date >= @StartDate and C.date < @EndDate)) as I
Group by I.Date, I.System
Order by I.Date asc, I.System asc, calls asc

那么我应该在每个嵌套SET TRANSACTION ISOLATION LEVEL之后Alter Procedure dbo.ExampleProcedure as还是之前在此先感谢您的指导!SELECTSELECT

迈克·谢里尔(Mike Sherrill)

我想知道是否只需要在存储过程的顶部指定一次此隔离级别。

在此过程的顶部仅执行一次,除非您当然要该过程中切换隔离级别隔离级别恢复到以前的水平,当SP退出。

如果在存储过程或触发器中发出SET TRANSACTION ISOLATION LEVEL,则当对象返回控件时,隔离级别将重置为调用对象时有效的级别。例如,如果您在批次中设置了REPEATABLE READ,然后该批次调用了将隔离级别设置为SERIALIZABLE的存储过程,则当存储过程将控制权返回给该批次时,隔离级别设置将恢复为REPEATABLE READ。

使用“未提交读”隔离级别可能对历史数据没有风险。我假设指示您使用该隔离级别的人员知道风险,并确定它是安全的。

历史数据通常要么根本不改变,要么以已知间隔改变。(例如,每季度。或者每天凌晨1:00。)我希望相对较少的人在这些表上具有插入特权,而几乎没有人具有更新和删除特权。

您可能还会测试在单个事务中运行三个单独的插入语句,而不是插入三个选择语句的并集。ORDER BY子句在生产中可能不是一个好主意。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以强制SQL SMO使用READ UNCOMMITTED隔离吗?

来自分类Dev

Presto上的UNION ALL / UNION

来自分类Dev

在 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 中运行存储过程

来自分类Dev

使用UNION / UNION ALL和Group By的MySQL查询错误

来自分类Dev

SQL-UNION,UNION ALL,INTERSECT,EXCEPT

来自分类Dev

SQL-UNION,UNION ALL,INTERSECT,EXCEPT

来自分类Dev

ClickHouse Union All例外

来自分类Dev

SQL Union all语句

来自分类Dev

如何使UNION ALL更快?

来自分类Dev

UNION ALL Trick ORACLE

来自分类Dev

Union ALL 带分区

来自分类Dev

使用UNION ALL分组和排序

来自分类Dev

postgres跨架构查询使用UNION ALL

来自分类Dev

在子查询中使用UNION ALL分组

来自分类Dev

有IN子句时如何使用UNION ALL?

来自分类Dev

使用UNION ALL和ORDER BY选择

来自分类Dev

postgres跨架构查询使用UNION ALL

来自分类Dev

使用 union all 更新多列

来自分类Dev

使用 Union All 动态组合查询

来自分类Dev

Spring事务性注释,隔离不适用于READ_UNCOMMITTED

来自分类Dev

使用UNION和GROUP BY的AS

来自分类Dev

使用哪个Join或Union?

来自分类Dev

使用UNION和结构

来自分类Dev

在NOT IN内使用UNION

来自分类Dev

使用 UNION 的性能问题

来自分类Dev

在使用ember-data进行unloadAll时如何避免出现“ loaded.created.uncommitted”错误?

来自分类Dev

在使用ember-data进行unloadAll时如何避免出现“ loaded.created.uncommitted”错误?

来自分类Dev

Oracle Optimizer issue with UNION ALL

来自分类Dev

如何简化UNION ALL的结果