优化一条UPDATE语句

    最近见到一条开发人员写的UPDATE语句, 觉得没什么不对, 可又觉得有地方不对, 因为性能低下.

UPDATE A SET
  (COL2, COL3) = (SELECT COL1,'T'
      FROM B WHERE B.COL1=A.COL1)
WHERE EXISTS
  (SELECT B.COL1 FROM B WHERE B.COL1=A.COL1)

    也就更新几十万条记录, 没这么慢的啊. 最后发现这个SQL语句可以简化为如下.

UPDATE A SET COL2=COL1, COL3='T'
WHERE EXISTS
  (SELECT B.COL1 FROM B WHERE B.COL1=A.COL1)

    说明还有很多可以提高的地方.

留言 (4)

刚好这个语句比较特别,如果不是col2=col1的话,也就是刚好2张都有col1字段,而且都相等。如果需要a.col2=b.col3的话,下面的方式就不行了。

我也举例子
一共有三个表:A、B、C
我看到开发人员是这样来做的
select count(*) from A,B,C
where A.id=B.id
and B.other_id=C.id(+);

这里就多了一个右连接,其实和这样结果是一样的
select count(*) from A,B
where A.id=B.id


主要是求count(*)

楼上的例子不错,SQL Tuning就是这样开始的。

UPDATE A SET COL2=COL1, COL3='T'
WHERE EXISTS
(SELECT B.COL1 FROM B WHERE B.COL1=A.COL1)

SET COL2=COL1这个COL1是A表的还是B表的列?

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • How are you feeling today?
  • 你今天感觉怎么样?
  • I don't feel very well.
  • 我觉得不太舒服.
  • Do you fell better now?
  • 你现在觉得好点了吗?
  • Much better.
  • 好多了.
  • I'm sick.
  • 我病了.