SQLServer優化:SQLServer中NOLOCK關鍵字的用法介紹

目錄

1、為什么SQLServer有NOLOCK關鍵字?

2、SQLServer有NOLOCK有什么問題

3、NOLOCK使用場景

4、nolock和with(nolock)的區別

5、表解鎖腳本


? ? ??7c5ac0350f9d45faba0710978ed1a964.png? ? ? ? ?

1、為什么SQLServer有NOLOCK關鍵字?

SQLServer沒創建一個查詢,都相當于創建一個查詢會話,在不同的查詢分析器里面進行的查詢操作,可能會影響別的查詢會話。比較典型的一個例子,如果你正在使用事務執行某一張表的插入或者操作而沒有正確關閉事務的情況下,會造成別的會話針對該數據表的查詢都會處于阻塞的狀態,從而不能完成查詢的操作。這個時候有兩個解決方案,第一種查詢到阻塞的會話id然后殺掉該會話id,

第二種可以使用WITH(NOLOCK)關鍵字忽略掉阻塞的會話直接查詢出結果。

簡單來說NOLOCK關鍵字的作用是防止查詢的時候被別的會話阻塞,從而順利完成查詢的操作。

2、SQLServer有NOLOCK有什么問題

使用NOLOCK關鍵字可以避免阻塞造成無法查詢出數據,但使用該關鍵字會有造成數據臟讀的可能。下面舉個例子

2.1 ?創建數據表

CREATE TABLE [dbo].[userInfo] ([id] varchar(32) COLLATE Chinese_PRC_CI_AS  NOT NULL,[userName] nvarchar(30) COLLATE Chinese_PRC_CI_AS  NULL,[birthday] [dbo].[birthday]  NULL,CONSTRAINT [PK__userInfo__3213E83F0505C75D] PRIMARY KEY CLUSTERED ([id])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)  
ON [PRIMARY]
)  
ON [PRIMARY]
GO
INSERT INTO [dbo].[userInfo] ([id], [userName], [birthday])VALUES ('123', N'小明', '2005-01-02 12:30:00.000');
INSERT INTO [dbo].[userInfo] ([id], [userName], [birthday])VALUES ('125', N'小孫', '2005-01-02 12:30:00.000');

2.2 ?創建時候 會話id 為58 開啟事務 不關閉事務

begin tran 
insert into userInfo (id,userName,birthday)
values ('127','小張','2015-01-02 12:30:00.000')
--commit tran

2.3 ?當前會話(58)還可以查詢出數據

事務還沒有提交 此時數據還在內存中,未保存到數據庫當中

select * from userInfo

? ? ? ?e58927563e2cb4cb33a82610b5ff180b.png ? ? ? ?

2.4 新建一個查詢會話 當前新建的id是51

select * from userInfo;
select * from userInfo WITH(NOLOCK);

? ? ? ?13bcfbcea2164933e79a6f6c57ea4f73.png ? ? ? ?

? ? ? ?eed5258968c208705fbdae0d93768b09.png ? ? ? ?

2.5 ?殺掉58會話進程

declare @spid  int 
Set @spid  = 58 --鎖表進程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid  as varchar)
exec(@sql)

? ? ? ?ad3253e17fbc066db83266a68cfad0cc.png ? ? ? ?

3、NOLOCK使用場景

針對那些被頻繁操作(插入、更新、刪除)的表,使用NOLOCK是非常比較適合的,但要考慮到臟讀的情況。

  • 不經常修改的數據表,省掉鎖定表的時間來大大加快查詢速度。

  • 數據量非常大的數據表,可以考慮犧牲數據安全性來提升查詢的效率;

  • 允許出現臟讀現象的業務邏輯,對數據完整性要求比較嚴格的場景不適合,比如電商、銀行等系統。

  • 當使用NoLock時,它允許閱讀那些已經修改但是還沒有結束事務的數據。因此要考慮transaction事務數據的實時完整性時,不建議使用。

4、nolock和with(nolock)的區別

三種查詢寫法

SELECT * FROM A NOLOCK;
SELECT * FROM A (NOLOCK);
SELECT * FROM A WITH(NOLOCK);

1、SQLServer2005版本中,只支持with(nolock)關鍵字

2、with(nolock)的寫法非常容易再指定索引

3、跨數據庫服務器查詢語句時不能用with (nolock) 只能用nolock,同數據服務器查詢時 兩者都可以用

-- SQL Server 2008版本之后建議采用WITH(NOLOCK)寫法。

5、表解鎖腳本

-- 查詢被鎖表
select request_session_id   spid
,OBJECT_NAME(resource_associated_entity_id) tableName   
from   sys.dm_tran_locks where resource_type='OBJECT';
--參數說明 spid   鎖表進程 ;tableName   被鎖表名
-- 解鎖語句 需要拿到spid然后殺掉縮表進程
declare @spid  int 
Set @spid  = 57 --鎖表進程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid  as varchar)
exec(@sql)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270424.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270424.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270424.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20144303 20145239 實驗三

20144303 20145239 實驗三 實驗內容 1、首先連接好實驗箱電源,用串口線、并口線、網線、連接實驗箱和主機 2、安裝ADS并破解 安裝文件在00-ads1.2目錄下,破解方法在00-ads1.2\Crack目錄下 3、安裝GIVEIO驅動(安裝文件在01-GIVEIO目錄下) 把整個GIVEIO目錄…

oracle無法創建監聽器,關于Oracle net Manager中點擊無法創建監聽程序的解決方案

首先查看你的環境變量中是否有如果沒有請添加該環境變量。變量名為:TNS_ADMIN 變量值為:E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN;(如果你更改了默認目錄,請找到相應的目錄加進去),添加完成之后,…

辦公技巧:分享5個非常好用的Excel插件

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

weblogic安全漫談

今天,我來與大家探討一下關于weblogic的話題 在進入內網后,如圖: 當我們看到7001時,我們就可以測試weblogic反序列化漏洞,如圖: 證明,漏洞存在,查看一下權限,如圖&#x…

linux使進程不依賴終端,Linux?nohup命令應用簡介--讓Linux的進程不受終端影響

nohup命令應用簡介--讓Linux的進程不受終端影響by:授客QQ:1033553122#開啟ping進程[rootlocalhost ~]# pinglocalhost &[2] 4169[1]Terminatednohup ping localhost[rootlocalhost ~]# PINGlocalhost (127.0.0.1) 56(84) bytes of data.64 bytes from localhost…

電腦技巧:Win10操作系統設置定時開機圖解教程

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

JavaScript對UNIX時間戳的轉換

<script type"text/javascript">   var timestamp 1479886513;   var d new Date(timestamp * 1000); //根據時間戳生成的時間對象   var date (d.getFullYear()) "-"     (d.getMonth() 1) "-"     (d.getDate())…

網絡技巧:想要WiFi信號滿格,路由器應該這樣放

現如今人手一部手機 不知不覺 WiFi也成了生活“必需品” 刷視頻正入迷視頻卻突然卡頓 換個房間就收不到WiFi信號 如此令人抓狂的事情 生活中你一定遇到過 其實 這與路由器的錯誤擺放有很大關系 家庭無線路由器 放置在哪里信號最好&#xff1f; WiFi信號差如何解決&#xff1f; …

linux系統export,Linux入門進階 - 如何在Linux中使用export命令

原標題&#xff1a;Linux入門進階 - 如何在Linux中使用export命令來自&#xff1a; Linux迷鏈接&#xff1a;https://www.linuxmi.com/linux-export.htmlLinux export命令會標記哪些值需要傳遞給一組子進程。這是bash shell提供的一個簡單但有用的特性。它允許管理員在不中斷當…

Duilib開發環境搭建

1.到github上下載最新版本&#xff0c;https://github.com/duilib/duilib&#xff0c;也沒有發現版本號&#xff0c;就如圖所示吧 2.我只安裝了VS2008&#xff0c;而github上的已經更新到VS2013了&#xff0c;所以要手動修改SIN工程文件 把sln文件打開&#xff0c;將最上面的2行…

手機技巧:手機丟了記住這四步操作,讓你的損失降到最低

隨著掃碼支付的普及、智慧生活的升級&#xff0c;沒有錢包能付賬&#xff0c;沒有公交卡能乘車&#xff0c;沒有銀行卡也能取款&#xff0c;只要你手機在手&#xff0c;手機手機錢包身份證銀行卡各種支付密碼。但你是否想過&#xff0c;如果某一天手機丟了&#xff0c;該怎么辦…

linux下搭建vsftp鎖定根目錄,Linux服務搭建之vsftp

安裝vsftpubuntu14.04sudo apt-get install vsftp&#xff12;&#xff0e;配置文件/etc/vsftp.congf&#xff13;&#xff0e;相關配置write-enableYES允許上傳文件local_enableYES允許/etc/passwd中記錄的用戶登錄ftp匿名用戶登錄&#xff1a;# 允許匿名用戶登錄anonymous_en…

mysql共享鎖

共享鎖 共享鎖指的就是對于多個不同的事務&#xff0c;對同一個資源共享同一個鎖。相當于對于同一把門&#xff0c;它擁有多個鑰匙一樣。就像這樣&#xff0c;你家有一個大門&#xff0c;大門的鑰匙有好幾把&#xff0c;你有一把&#xff0c;你女朋友有一把&#xff0c;你們都…

YII2 隨筆 視圖最佳實踐

yii\base\Controller::render(): 渲染一個 視圖名 并使用一個 布局 返回到渲染結果。yii\base\Controller::renderPartial(): 渲染一個 視圖名 并且不使用布局。yii\web\Controller::renderAjax(): 渲染一個 視圖名 并且不使用布局&#xff0c; 并注入所有注冊的JS/CSS腳本和文…

網絡技巧:無線路由器越用越慢的解決方法

目錄 01 ???????路由器越用越慢很平常 02 國區設置不要亂用 03 很容易被遺忘的IPv6設置 04 學會自我檢查掉線問題 05 番外篇&#xff1a;測試自己的網速 “耳機、音箱通過一定時間的煲機&#xff0c;表現效果會變好&#xff0c;可為何家里WiFi網絡卻老是給人越用越慢、越…

Mac軟件:15個提升辦公效率的軟件

目錄 1.解壓軟件&#xff1a;RAR Extractor - The Unarchiver Pro 2.實用清理軟件&#xff1a;CleanMyMac X 3.水族屏保軟件:Desktop Aquarium Wallpaper?s 4.桌面圖標隱藏工具&#xff1a;Desktop Curtain 5.剪貼板工具&#xff1a;Paste 6.快捷鍵查看軟件&#xff1a;Cheats…

樂觀鎖介紹

1.樂觀鎖介紹 樂觀鎖&#xff08; Optimistic Locking &#xff09; 相對悲觀鎖而言&#xff0c;樂觀鎖假設認為數據一般情況下不會造成沖突&#xff0c;所以在數據進行提交更新的時候&#xff0c;才會正式對數據的沖突與否進行檢測&#xff0c;如果發現沖突了&#xff0c;則讓…

從0開始學習 GitHub 系列之「03.Git 速成」

前面的 GitHub 系列文章介紹過&#xff0c;GitHub 是基于 Git 的&#xff0c;所以也就意味著 Git 是基礎&#xff0c;如果你不會 Git &#xff0c;那么接下來你完全繼續不下去&#xff0c;所以今天的教程就來說說 Git &#xff0c;當然關于 Git 的知識單憑一篇文章肯定說不完的…