Sql-Server
READ UNCOMMITTED 是否會對靜態數據產生任何性能差異?
我有一些靜態表可以獲得很多選擇查詢
我想知道我是否將它添加到每個查詢中,這是否會產生任何性能差異?
SQL 伺服器 2014
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
這是我執行以下查詢後的等待時間
select * from sys.dm_os_wait_stats WHERE [wait_type] NOT IN ( N'CLR_SEMAPHORE', N'LAZYWRITER_SLEEP', N'RESOURCE_QUEUE', N'SQLTRACE_BUFFER_FLUSH', N'SLEEP_TASK', N'SLEEP_SYSTEMTASK', N'WAITFOR', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION', N'CHECKPOINT_QUEUE', N'REQUEST_FOR_DEADLOCK_SEARCH', N'XE_TIMER_EVENT', N'XE_DISPATCHER_JOIN', N'LOGMGR_QUEUE', N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'BROKER_TASK_STOP', N'CLR_MANUAL_EVENT', N'CLR_AUTO_EVENT', N'DISPATCHER_QUEUE_SEMAPHORE', N'TRACEWRITE', N'XE_DISPATCHER_WAIT', N'BROKER_TO_FLUSH', N'BROKER_EVENTHANDLER', N'FT_IFTSHC_MUTEX', N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP', N'DIRTY_PAGE_POLL', N'SP_SERVER_DIAGNOSTICS_SLEEP') order by wait_time_ms desc;
如果您的數據是不可變的,請將數據庫標記為只讀。查詢執行引擎會辨識這一點並跳過鎖定。然而,好處是微乎其微的。如果擔心鎖定,則意味著a)您有鎖定衝突,這意味著數據不是不可變的或b)您獲得了太多鎖,這意味著需要通過根據需要添加索引來解決大型掃描。
有關詳細資訊,請閱讀如何分析 SQL Server 性能。
READ UNCOMMITTED
與 using 相同NOLOCK
,如果數據沒有變化,它將提供與NOLOCK
.不過,這並不是一個適用於所有事情的快速按鈕。未送出的數據是未送出的數據,如果底層數據確實經常更改,則不應信任。確保在正確的上下文中使用它。
我還會查看覆蓋索引,即滿足您查詢的索引。您還可以通過過濾索引找到樂趣。在打開
NOLOCK
/之前,我會先看看那裡READ UNCOMMITTED
。