2016-07-26 70 views
0

下面的這個查詢是否正常工作,或者我是否使用了明確的事務存在和結束?SET TRANSACTION隔離級別READ未提交 - 是否有必要明確使用事務開始和結束?

是的,我知道讀未提交

SET TRANSACTION isolation level READ uncommitted 

SELECT TOP 100 tblguilds.guild_id, 
       tblguilds.guildname, 
       tblguilds.leaderuserid, 
       tblusersprofile.username 
FROM tblguilds 
     LEFT JOIN tblusersprofile 
       ON tblusersprofile.userid = tblguilds.leaderuserid 
WHERE tblguilds.guild_id NOT IN (SELECT guildcode 
            FROM tblguildapplied 
            WHERE userid = 1) 
ORDER BY Newid() 
+0

我的理解是交易開始/結束周圍的選擇不做任何事情。選擇與更新/插入一起做某事,但在開始/結束時選擇_only_是沒有意義的。也許有人可以證實這一點。 –

回答

2

是,將工作,但要知道,這將是整個會議的效果的危險。意思是在選擇之後執行的任何SQL都將使用該隔離級別。如果要限制在選擇語句特定的表,然後考慮使用NOLOCK提示

查看更多在這裏: WITH (NOLOCK) vs SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

的BEGIN TRANSACTION和COMMIT(沒有結束事務)只適用於插入/更新/刪除

在一個側面說明我會修改該查詢使用左外連接而不是NOT IN來提高性能。

+0

所以我們可以說每個連接=每個會話都對嗎? – MonsterMMORPG

+0

@MonsterMMORPG是的,但要在技術上準確地執行所有在同一SPID下運行的「設置隔離級別....」命令,並且它將保持有效,直到該SPID(連接)關閉或隔離級別爲明確重置/更改爲其他內容。 – objectNotFound

相關問題