1. 程式人生 > 其它 >Sql Server中行鎖定、表鎖定與索引的關係

Sql Server中行鎖定、表鎖定與索引的關係

新手在Sql Server資料庫中建表時,往往容易忽略索引,如果資料量很小時,查詢效率影響可以忽略,但涉及到更新操作時,同樣容易引發異常問題

以訂單表為列,比如訂單表saleorder中有主鍵id,訂單號vouchercode,訂單備註remark等欄位,建表時主鍵id會自動建立索引,假如現在需要按訂單號去更新備註

事務1:

begin tran
update saleorder set remark='test' where vouchercode='SO2021110001'
commit tran

事務2:

begin tran
update saleorder set remark='test' where vouchercode='SO2021110002'
commit tran

雖然更新的是不同的行,但因為查詢條件列vouchercode沒有建立索引,事務1執行時,會對saleorder 整表進行鎖定,必須等到事務1提交後,才能執行事務行

如果在vouchercode列中建立索引後,事務1和事務2執行時鎖定的就是各自查詢條件中的行,就互不影響了

所以建表時,一定要考慮好同時建立索引,因為索引不止影響查詢效率,也會對更新造成影響