我现在在生产环境上写一些脚本,但是碰到一个update问题语句很简单,涉及到一个索引,性能影响很大。
数据库版本是oracle10g这是两个不同的表,但是索引数量一样,10几个,数据量也一样,20多万。A,B表id是主键,flag上是一个normal index,包含的值有null,1,2,3执行相同逻辑的语句,大概update 2万条记录,A表80多秒,B表只要3秒多。
      
    update A set a='1' where id=? and flag is null;      update B set b='1' where id=? and flag is null;
当执行 条件发生变化时,都变成1,就都差不多。
为什么执行条件为NULL的时候,会差这么多呢?    update A set a='1' where id=? and flag =‘1’;      update B set b='1' where id=? and flag =‘1’;
A 表 
    id ,主键
    a   varchar 
      flag varchar
B表 
    id,主键
    b  varchar
      flag varvhar