成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server注意事項總結,高級程序員必背!

數據庫 SQL Server
本篇文章主要介紹SqlServer使用時的注意事項。想成為一個高級程序員,數據庫的使用是必須要會的。而數據庫的使用純熟程度,也側面反映了一個開發的水平。

[[249632]]

本篇文章主要介紹SQL Server使用時的注意事項。

想成為一個高級程序員,數據庫的使用是必須要會的。而數據庫的使用純熟程度,也側面反映了一個開發的水平。

下面介紹SQL Server在使用和設計的過程中需要注意的事項。

SQL Server注意事項

Sql事務啟動語句

開始事務:BEGIN TRANSACTION

提交事務:COMMIT TRANSACTION

回滾事務:ROLLBACK TRANSACTION

相關注意事項

保持事務簡短,事務越短,越不可能造成阻塞。

在事務中盡量避免使用循環while和游標,以及避免采用訪問大量行的語句。

事務中不要要求用戶輸入。

在啟動事務前完成所有的計算和查詢等操作。

避免同一事務中交錯讀取和更新。可以使用表變量預先存儲數據。即存儲過程中查詢與更新使用兩個事務實現。

超時會讓事務不執行回滾,超時后如果客戶端關閉連接sqlserver自動回滾事務。如果不關閉,將造成數據丟失,而其他事務將在這個未關閉的連接上執行,造成資源鎖定,甚至服務器停止響應。

避免超時后還可打開事務 SET XACT_ABORT ON統計信息可以優化查詢速度,統計信息準確可以避免查詢掃描,直接進行索引查找。

sp_updatestats可以更新統計信息到最新。

低內存會導致未被客戶端連接的查詢計劃被清除。

修改表結構,修改索引后,查詢計劃會被清除,可以再修改后運行幾遍查詢。

DDL DML交錯和查詢內部SET選項將重新編譯查詢計劃。

order by 影響查詢速度。

where中使用函數則會調用篩選器進行掃描,掃描表要盡量避免。

updlock和holdlock同時使用可以在早期鎖定后面需要更新的資源,維護資源完整性,避免沖突。

如果不需要使用臨時表的統計信息來進行大數據查詢,表變量是更好的選擇。

事務使用注意事項

設置事務隔離級別(未提交讀,讀臟),相當于(NOLOCK) 的語句:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

隔離級別描述如下:

1、READ UNCOMMITTED

READ UNCOMMITTED:未提交讀,讀臟數據。

默認的讀操作:需要請求共享鎖,允許其他事物讀鎖定的數據但不允許修改。

READ UNCOMMITTED:讀操作不申請鎖,允許讀取未提交的修改,也就是允許讀臟數據,讀操作不會影響寫操作請求排他鎖。

2、READ COMMITTED

READ COMMITTED(已提交讀)是SQL SERVER默認的隔離級別,可以避免讀取未提交的數據,隔離級別比READ UNCOMMITTED未提交讀的級別更高;

該隔離級別讀操作之前首先申請并獲得共享鎖,允許其他讀操作讀取該鎖定的數據,但是寫操作必須等待鎖釋放,一般讀操作讀取完就會立刻釋放共享鎖。

3、REPEATABLE READ

REPEATABLE READ(可重復讀):保證在一個事務中的兩個讀操作之間,其他的事務不能修改當前事務讀取的數據,該級別事務獲取數據前必須先獲得共享鎖同時獲得的共享鎖不立即釋放一直保持共享鎖至事務完成,所以此隔離級別查詢完并提交事務很重要。

4、SERIALIZABLE

SERIALIZABLE(可序列化),對于前面的REPEATABLE READ能保證事務可重復讀,但是事務只鎖定查詢第一次運行時獲取的數據資源(數據行),而不能鎖定查詢結果之外的行,就是原本不存在于數據表中的數據。因此在一個事務中當第一個查詢和第二個查詢過程之間,有其他事務執行插入操作且插入數據滿足第一次查詢讀取過濾的條件時,那么在第二次查詢的結果中就會存在這些新插入的數據,使兩次查詢結果不一致,這種讀操作稱之為幻讀。

為了避免幻讀需要將隔離級別設置為SERIALIZABLE

5、SNAPSHOT

SNAPSHOT快照:SNAPSHOT和READ COMMITTED SNAPSHOT兩種隔離(可以把事務已經提交的行的上一版本保存在TEMPDB數據庫中)

SNAPSHOT隔離級別在邏輯上與SERIALIZABLE類似

READ COMMITTED SNAPSHOT隔離級別在邏輯上與 READ COMMITTED類似

不過在快照隔離級別下讀操作不需要申請獲得共享鎖,所以即便是數據已經存在排他鎖也不影響讀操作。而且仍然可以得到和SERIALIZABLE與READ COMMITTED隔離級別類似的一致性;如果目前版本與預期的版本不一致,讀操作可以從TEMPDB中獲取預期的版本。

如果啟用任何一種基于快照的隔離級別,DELETE和UPDATE語句在做出修改前都會把行的當前版本復制到TEMPDB中,而INSERT語句不需要在TEMPDB中進行版本控制,因為此時還沒有行的舊數據

無論啟用哪種基于快照的隔離級別都會對更新和刪除操作產生性能的負面影響,但是有利于提高讀操作的性能因為讀操作不需要獲取共享鎖;

5.1SNAPSHOT

SNAPSHOT 在SNAPSHOT隔離級別下,當讀取數據時可以保證操作讀取的行是事務開始時可用的最后提交版本

同時SNAPSHOT隔離級別也滿足前面的已提交讀,可重復讀,不幻讀;該隔離級別實用的不是共享鎖,而是行版本控制

使用SNAPSHOT隔離級別首先需要在數據庫級別上設置相關選項

5.2 READ COMMITTED SNAPSHOT

READ COMMITTED SNAPSHOT也是基于行版本控制,但是READ COMMITTED SNAPSHOT的隔離級別是讀操作之前的最后已提交版本,而不是事務前的已提交版本,有點類似前面的READ COMMITTED能保證已提交讀,但是不能保證可重復讀,不能避免幻讀,但是又比 READ COMMITTED隔離級別多出了不需要獲取共享鎖就可以讀取數據

SQL Server【鎖】注意事項

一、頁鎖實例

T1: select * from table (paglock)

T2: update table set column1='hello' where id>10

說明

T1執行時,會先對第一頁加鎖,讀完第一頁后,釋放鎖,再對第二頁加鎖,依此類推。假設前10行記錄恰好是一頁(當然,一般不可能一頁只有10行記錄),那么T1執行到第一頁查詢時,并不會阻塞T2的更新。

----------------------

二、行鎖實例

T1:select * from table (rowlock)

T2:update table set column1='hello' where id=10

說明

T1執行時,對每行加共享鎖,讀取,然后釋放,再對下一行加鎖;T2執行時,會對id=10的那一行試圖加鎖,只要該行沒有被T1加上行鎖,T2就可以順利執行update操作。

------------------

三、整表鎖實例

T1:select * from table (tablock)

T2:update table set column1='hello' where id = 10

說明

T1執行,對整個表加共享鎖。 T1必須完全查詢完,T2才可以允許加鎖,并開始更新。 

責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2011-07-05 11:28:14

程序員

2010-07-19 14:37:20

SQL Server

2013-02-26 14:07:52

SQL Server虛擬化

2010-07-20 13:02:03

SQL Server索

2018-03-06 10:14:55

程序員找工作經驗教訓

2015-05-04 14:51:49

SQL子查詢

2011-04-11 16:23:57

2010-07-26 10:59:59

SQL Server游

2010-06-29 17:32:13

SQL Server鎖

2009-12-16 16:02:30

Visual Stud

2010-07-15 13:38:35

2011-08-03 11:40:49

布線系統

2019-11-27 10:46:06

sqlserver數據庫sql

2023-05-05 08:08:06

JavaRedis事務

2011-03-25 14:27:40

數據庫開發程序員

2019-01-16 18:11:28

程序員技能開發者

2010-07-16 14:01:22

安裝SQL Serve

2010-07-23 10:09:41

SQL Server

2009-12-15 13:23:21

動態路由協議

2017-04-06 09:49:55

Hive注意事項優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 视频在线一区二区 | 午夜一区二区三区 | www.四虎.com| 一级aaaa毛片| 综合色在线| 久久99精品久久久久久青青日本 | 五月婷婷激情网 | 久久国产精品一区二区三区 | 成人av鲁丝片一区二区小说 | 午夜一区二区三区在线观看 | 性色av香蕉一区二区 | 亚洲一区精品视频 | 精品中文在线 | 中国一级大毛片 | 亚洲欧美一区二区三区情侣bbw | 婷婷激情综合 | 成人性视频免费网站 | 国产区在线 | 国产精品海角社区在线观看 | 色综合久久伊人 | 成年人在线观看 | 视频一区在线观看 | 日日碰狠狠躁久久躁96avv | 精品国产一区二区在线 | 欧美一区在线视频 | 国产精品日日做人人爱 | 一区二区中文字幕 | 丁香一区二区 | 天天干.com | 精品一区二区在线观看 | 中文字幕a√ | 91国内精品久久 | 国产精品视频一二三区 | 日韩一区二区在线免费观看 | 色天堂影院 | 国产成人精品免费视频大全最热 | 69热视频在线观看 | 国产在视频一区二区三区吞精 | 99久久久国产精品 | 欧美一级片在线看 | 国产 亚洲 网红 主播 |