SQL Server強制使用特定索引 、並行度、鎖

SQL Server強制使用特定索引 、並行度sql

修改或刪除數據前先備份,先備份,先備份(重要事情說三遍)併發

不少時候你或許爲了測試、或許爲了規避併發給你SQL帶來的一些問題,經常須要強制指定目標sql選擇某個索引或並行度去執行,今天給你們分享一下SQL的強制行爲11測試

一、強制使用某個索引索引

select id,name from A where id=2 with INDEX(idx_name)事務

二、強制使用某個並行度it

select id,name from A where id=2 with option(MAXDOP=1)io

三、強制不加鎖ast

--容許髒讀select

select id,name from A with(nolock)並行

--跳過鎖定行

select id,name from A with(readpast)

--

四、強制保持表級鎖

--別人能夠讀,可是不能插入、更新、刪除

select id,name from A with(holdlock)

--別人什麼都不能作,包括讀

select id,name from A with(tablock)

 

以上,在一些特殊的場景下或許會可以幫助到你!

 

補充:

鎖定提示                                 描述  HOLDLOCK        將共享鎖保留到事務完成,而不是在相應的表、行或數據頁再也不須要時就當即釋放鎖。HOLDLOCK        等同於        SERIALIZABLE。        NOLOCK        不要發出共享鎖,而且不要提供排它鎖。當此選項生效時,可能會讀取未提交的事務或一組在讀取中間回滾的頁面。有可能發生髒讀。僅應用於SELECT語句。        PAGLOCK        在一般使用單個表鎖的地方採用頁鎖。        READCOMMITTED        用與運行在提交讀隔離級別的事務相同的鎖語義執行掃描。默認狀況下,SQLServer在此隔離級別上操做。        READPAST        跳過鎖定行。此選項致使事務跳過由其它事務鎖定的行(這些行日常會顯示在結果集內),而不是阻塞該事務,使其等待其它事務釋放在這些行上的鎖。READPAST鎖提示僅適用於運行在提交讀隔離級別的事務,而且只在行級鎖以後讀取。僅用於SELECT語句。        READUNCOMMITTED        等同於NOLOCK。        REPEATABLEREAD        用與運行在可重複讀隔離級別的事務相同的鎖語義執行掃描。        ROWLOCK        使用行級鎖,而不使用粒度更粗的頁級鎖和表級鎖。        SERIALIZABLE        用與運行在可串行讀隔離級別的事務相同的鎖語義執行掃描。等同於HOLDLOCK。        TABLOCK        使用表鎖代替粒度更細的行級鎖或頁級鎖。在語句結束前,SQL Server一直持有該鎖。可是,若是同時指定HOLDLOCK,那麼在事務結束以前,鎖將被一直持有。        TABLOCKX        使用表的排它鎖。該鎖能夠防止其它事務讀取或更新表,並在語句或事務結束前一直持有。        UPDLOCK        讀取表時使用更新鎖,而不使用共享鎖,並將鎖一直保留到語句或事務的結束。UPDLOCK 的優勢是容許您讀取數據(不阻塞其它事務)並在之後更新數據,同時確保自從上次讀取數據後數據沒有被更改。        XLOCK        使用排它鎖並一直保持到由語句處理的全部數據上的事務結束時。可使用PAGLOCK或TABLOCK 指定該鎖,這種狀況下排它鎖適用於適當級別的粒度

相關文章
相關標籤/搜索