sql server強制使用特定索引 、並行度
修改或刪除資料前先備份,先備份,先備份(重要事情說三遍)
很多時候你或許為了測試、或許為了規避並發給你sql帶來的一些問題,常常需要強制指定目標sql選擇某個索引或並行度去執行,今天給大家分享一下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 將共享鎖保留到事務完成,而不是在相應的表、行或資料頁不再需要時就立即釋放鎖。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 指定該鎖,這種情況下排它鎖適用於適當級別的粒度
SQL SERVER 強制排序規則查詢
有時會需要在2個db之間的資料做比較,但因為一些原因,資料庫的預設排序規則是不一樣的,例如 select a.col1,b.col1,a.from db1.dbo.a left join db2.dbo.b on a.code b.code where 1 1 order by a.col2 則會報...
sqlserver擷取特定字串
sqlserver擷取特定字串 最近遇到用sql語句擷取字串的問題,例如字段值為某一格式為 a b c d 或者 a b c 1 截取出第四段字元d,如果為四段式,則擷取,否則返回空 說明 先判斷有多少個 然後分別處理 select case when len teststring len repl...
強制使用GPU
對於tensorflow,宣告session的時候加入device count 即可 import tensorflow as tf sess tf.session config tf.configproto device count 對於keras,則呼叫後端函式,設定其使用如上定義的sessio...