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 指定該鎖,這種狀況下排它鎖適用於適當級別的粒度