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执行时锁定的就是各自查询条件中的行,就互不影响了
所以建表时,一定要考虑好同时建立索引,因为索引不止影响查询效率,也会对更新造成影响

浙公网安备 33010602011771号