你的问题描述太笼统了,以至于我都无法知道你到底想要什么样的答案,幸好我今天心情不错,否则我都会象楼上那样回答你“加索引”,让你也模棱两可一把。更新,最好的方法就是加上唯一性(主键)索引(如果可以加唯一性(主键)索引的话)。然后采用关联视图进行字段更新。
SQL形如:update ( select a.field1 f1, a.field2 f2, b.field1 f3, b.field2 f4 from a, b where a.pk1 = b.pk1 and a.pk2 = b.pk2 ) set f1 = f3, f2 = f4;
如果两张表的逻辑无法满足唯一性(主键)索引的要求,你只需对大表(源表)建关键字段的索引即可,更新语句成功的关键在于你的SQL中,关键字段没有重值。
SQL形如:update a set (field1, field2) = ( select field1, filed2 from b where b.关键字段 = a.关键字段 );如果你没有条件添加索引(毕竟如果只是很小的一件事,甚至只是一致性需求,是没有必要大动干戈建索引,对我而言,是深恶痛绝那种不经推敲就乱建索引的行为,毕竟一个索引对表影响是整体的,建任何一个索引都不是只考虑单一SQL语句就可以的事情。所以请你也参考我这种“完美索引”主义:用最小的索引空间换取最大SQL访问性能,永远不建任何多余的索引!),你可以利用delete后insert的方法来代替UPDATE方法,就是先删除小表中的原数据,然后再将大表的相关数据insert进去。这种方法比较粗暴,还有一种温和一点的方法就是,先将大表的相关数据拉到一个临时表中去,这时对表的更新操作就是小表对小表的更新,往往都可以提高update语句的访问性能。
to myself:今天就玩到这里,半年后再见吧csdn!!