SQL Server强制使用特定索引 、并行度、锁
SQL Server強制使用特定索引 、并行度
修改或刪除數(shù)據(jù)前先備份,先備份,先備份(重要事情說三遍)
很多時候你或許為了測試、或許為了規(guī)避并發(fā)給你SQL帶來的一些問題,常常需要強制指定目標sql選擇某個索引或并行度去執(zhí)行,今天給大家分享一下SQL的強制行為11
1、強制使用某個索引
select id,name from A where id=2 with INDEX(idx_name)
2、強制使用某個并行度
select id,name from A where id=2 with option(MAXDOP=1)
3、強制不加鎖
--允許臟讀
select id,name from A with(nolock)
--跳過鎖定行
select id,name from A with(readpast)
--
4、強制保持表級鎖
--別人可以讀,但是不能插入、更新、刪除
select id,name from A with(holdlock)
--別人什么都不能做,包括讀
select id,name from A with(tablock)
?
以上,在一些特殊的場景下或許會能夠幫助到你!
?
補充:
鎖定提示???????????????????????????????? 描述?
HOLDLOCK??????? 將共享鎖保留到事務完成,而不是在相應的表、行或數(shù)據(jù)頁不再需要時就立即釋放鎖。HOLDLOCK??????? 等同于??????? SERIALIZABLE。???????
NOLOCK??????? 不要發(fā)出共享鎖,并且不要提供排它鎖。當此選項生效時,可能會讀取未提交的事務或一組在讀取中間回滾的頁面。有可能發(fā)生臟讀。僅應用于SELECT語句。???????
PAGLOCK??????? 在通常使用單個表鎖的地方采用頁鎖。???????
READCOMMITTED??????? 用與運行在提交讀隔離級別的事務相同的鎖語義執(zhí)行掃描。默認情況下,SQLServer在此隔離級別上操作。???????
READPAST??????? 跳過鎖定行。此選項導致事務跳過由其它事務鎖定的行(這些行平常會顯示在結(jié)果集內(nèi)),而不是阻塞該事務,使其等待其它事務釋放在這些行上的鎖。READPAST鎖提示僅適用于運行在提交讀隔離級別的事務,并且只在行級鎖之后讀取。僅用于SELECT語句。???????
READUNCOMMITTED??????? 等同于NOLOCK。???????
REPEATABLEREAD??????? 用與運行在可重復讀隔離級別的事務相同的鎖語義執(zhí)行掃描。???????
ROWLOCK??????? 使用行級鎖,而不使用粒度更粗的頁級鎖和表級鎖。???????
SERIALIZABLE??????? 用與運行在可串行讀隔離級別的事務相同的鎖語義執(zhí)行掃描。等同于HOLDLOCK。???????
TABLOCK??????? 使用表鎖代替粒度更細的行級鎖或頁級鎖。在語句結(jié)束前,SQL Server一直持有該鎖。但是,如果同時指定HOLDLOCK,那么在事務結(jié)束之前,鎖將被一直持有。???????
TABLOCKX??????? 使用表的排它鎖。該鎖可以防止其它事務讀取或更新表,并在語句或事務結(jié)束前一直持有。???????
UPDLOCK??????? 讀取表時使用更新鎖,而不使用共享鎖,并將鎖一直保留到語句或事務的結(jié)束。UPDLOCK 的優(yōu)點是允許您讀取數(shù)據(jù)(不阻塞其它事務)并在以后更新數(shù)據(jù),同時確保自從上次讀取數(shù)據(jù)后數(shù)據(jù)沒有被更改。???????
XLOCK??????? 使用排它鎖并一直保持到由語句處理的所有數(shù)據(jù)上的事務結(jié)束時。可以使用PAGLOCK或TABLOCK 指定該鎖,這種情況下排它鎖適用于適當級別的粒度
?
轉(zhuǎn)載于:https://www.cnblogs.com/syforacle/p/7891800.html
總結(jié)
以上是生活随笔為你收集整理的SQL Server强制使用特定索引 、并行度、锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GNS3路由器直连端口Ping不通
- 下一篇: linux cmake编译源码,linu