oracle:java一个方法里 update多个表 请问怎么优化.

java一个方法里 update多个表 而且更新的每张表的更新条件都是用的in。现在使用部门嫌反应速度太慢了。要优化..求支招

5个回答

无论在哪种情况下,IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。为了避免使用 IN ,我们可以把它改写成外连接(Outer Joins)或 EXISTS(或NOT EXISTS)

u012210835
_路人甲 一次操作是不是存储过程也不行
接近 3 年之前 回复
楼上说的不错,要避免使用 IN 关键词,基于楼上,我补充一段代码,你可以这样写:

Oracle语法:

UPDATE updatedtable SET (col_name1[,col_name2...])= (SELECT
col_name1,[,col_name2...] FROM srctable [WHERE where_definition])

Oracel 示例:

 update landleveldata a set (a.gqdltks, a.bztks)= (select b.gqdltks,
b.bztks from gdqlpj b where a.GEO_Code=b.lxqdm)

1.尽量使用表名前缀
2.**如果子查询和多表查询都可以,那么尽量使用多表查询**,也就是在能使用join就不要使用in
3.如果包含模糊查询,那么应该用instr,而不是like

我记得之前有人说过,说in是在表数据比较少的时候 执行效率和exists相差无几 in在执行查询的时候 会先把全表数据查出来 然后再代入where条件 进行筛选。
exists 是在查询全表数据的同时就已经把where条件代入到里面去了。

这个其实取决于你的多个表之间的数据差异,如果查询表和条件表之间的数据量差别不大,那么IN和EXISTS的性能是接近的。
对于多个表的条件筛选,你应该用inner join等方式,通过on来进行条件控制,同时对on用到的列,建立索引等来提升组合查询性能

m0_37806952
java小菜鸟2333 他是orcale。。。。
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问