首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化SQL语句

问优化SQL语句
EN

Stack Overflow用户
提问于 2014-02-23 13:02:46
回答 2查看 82关注 0票数 0

如果表B中按3列分组(A和B之间匹配)的记录计数小于7,则需要更新表A中的列。我编写了下面的查询,但它运行时间很长。请提出任何最佳查询或调优。

代码语言:javascript
复制
update /*+ parallel(A) */ A set A.col4=0
where exists
      (select 1 
       from B 
       where A.col1=B.col1 and A.col2=B.col2
          and A.col3=B.col3 
       group by col1,col2,col3
       having count(*) < 7)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-23 13:58:27

尝尝这个,

代码语言:javascript
复制
MERGE INTO A 
USING (
SELECT col1, col2, col3
      FROM B
      GROUP BY col1, col2, col3
      HAVING COUNT(*) > 7
) b ON (A.col1 = b.col1 AND A.col2=b.col2 AND A.col3= b.col3)
WHEN MATCHED THEN UPDATE
SET A.col4 = 0;

在SQL:http://www.sqlfiddle.com/#!4/dcdf1/17上查看它

让我知道它是否成功!

票数 0
EN

Stack Overflow用户

发布于 2014-02-23 13:57:11

我的第一个建议是在B:B(col1, col2, col3)上创建一个索引。

下一次尝试是将其转换为join。

代码语言:javascript
复制
update A
    set col4 = 0
    from (select col1, col2, col3
          from B
          group by col1, col2, col3
          having count(*) < 7
         ) B
    where A.col1 = B.col1 and A.col2 = B.col2
          and A.col3 = B.col3 ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21968572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档