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执行时锁定的就是各自查询条件中的行,就互不影响了

 

所以建表时,一定要考虑好同时建立索引,因为索引不止影响查询效率,也会对更新造成影响 

 

posted @ 2021-11-03 13:30  ZhangCaiJiang  阅读(258)  评论(0)    收藏  举报