update效率的问题?
如:
表:Table1
字段:value1(varchar),value2(varchar),value3(varchar)
1):update table1 set value1 = 'AAA ' where value2 = 'BBB ' or value3 = 'CCC ';
2):update table1 set value1 = 'AAA ' where value2 = 'BBB ';
update table1 set value1 = 'AAA ' where value3 = 'CCC ';
Table1 数据量:50万
1)执行很慢,但将1)拆分成两条数据(如:2))则执行很快,如果不做拆分,有什么方法提高效率吗?
------解决方案--------------------感觉是索引问题..
想问一上问题,OR会不会做遍历的啊?
------解决方案--------------------尽量不要用“or”吧,尤其是做update的时候。
------解决方案--------------------or一般都会做全表扫描,索引不起作用,所以尽量避免or
------解决方案--------------------尽量避免用or
------解决方案--------------------mengmou()mengmou() 说的是正确的
应该是楼主value2跟value3只有一个字段上有索引或无索引
LS的几位对OR的解释是不正确的,OR是可以应用索引的,只是OR的连接条件有一个不能应用索引便导致整个or连接条件不能应用索引(许多“权威”的书曾经给过大家这个谬误的认知)而已
具体执行情况可以看执行计划就可以的到结果
------解决方案--------------------谁说OR会引起全表扫描?看看SQL Server Books Online去,这个现象也许与内存大小有关,同时使用两个条件将导致更大的系统缓存,如果内存连续空间不足,将使用虚拟内存,导致IO时间加长;拆分为两次执行,可能恰好将每次的内存需求控制在可用物理内存之内。
楼主试试看仍旧用OR条件,但增加其他条件使更新的数据量只有1)的一半,观察一下效果。
------解决方案--------------------我也碰到樓主的問題,,,經常使用如下語句
update tab_a set col1=1 where type=1
update tab_a set col1=2 where type=2
update tab_a set col1=1 where type=3
速度是快了,感覺挺S的......