update table1 set bz=1 where id in('123','1111','333323','87676')
update table2 set bz=1 where id in('767','11987','2323',82828')
当多个用户同时操作上面两个语句时(id值都不相同)会不会很慢,或者阻塞,死锁之类的问题?谢谢。
id设为主键,表中数据有100万条
------解决方案--------------------
id是主键,那么也就是都不相同,那么也就有聚集索引,只要你的in重的id不是太多,那么应该是很快的,应该直至需要0.00几秒就可以更新完成的。
所以,很快,由于id都不同,所以也不会有阻塞的问题,至少update操作不会相互阻塞,也不会有死锁的问题。
------解决方案--------------------
数据库引擎这点优化还是会自动做到的
------解决方案--------------------
阻塞,死锁之类的问题,sql本身会处理的吧
------解决方案--------------------
会不会很慢,或者阻塞,死锁之类的问题?
你一共问到三点:
1.慢不慢的问题,不用考虑.
2.阻塞,这个要看你的执行完这个以后,提交的是否及时。
3.死锁是”你不给我钱,我不给你货“ ”你不给我货,我不给你钱“ 两个执着人(会话)引起的,也就是除了这条 update (钱的问题)之外,是否还有其他的update或delete(货的问题)。总之 一句话,单单一条 update ,不会引起死锁。
------解决方案--------------------
1、死锁 不可能。一般是 持有资源 占有其他资源才能死锁。不会更新语句以 排他的 不可能死锁
2、性能的问题这个建议是 id 建立 索引。
更新语句 看看执行计划。 最好写成 update table where id=1;update table where id=2
------解决方案--------------------
如果id为整型,则不用单引号,Update 时建议加上行锁
update table1 WITH (ROWLOCK) set bz=1 where id in(123,1111,333323,87676)
update table2 WITH (ROWLOCK) set bz=1 where id in(767,11987,2323,82828)
------解决方案--------------------
IN什么最好少用 性能不高