首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用视图的查询中的where子句是否会影响视图本身中的过滤器?

问调用视图的查询中的where子句是否会影响视图本身中的过滤器?
EN

Stack Overflow用户
提问于 2015-06-24 00:28:34
回答 1查看 38关注 0票数 0

好的,我有一个大约需要3秒执行的视图,使用一些样本数据,它设法返回了总共11行。

然后,我执行一个调用视图的查询,如下所示:

代码语言:javascript
复制
SELECT SUM(COL1), SUM(COL2), SUM(COL3)
FROM
(SELECT CLIENT,
        SUM(DECODE(COL1,'ABC',1,0)), 
        SUM(DECODE(COL2,'DEF',1,0)),
        SUM(DECODE(COL3,'ABC',1,0)),
 FROM MyView
 WHERE INDICATOR IN ('GREEN','YELLOW')
 GROUP BY CLIENT, TYPE
 UNION ALL
 SELECT 'TOTAL' TOTAL,
        SUM(DECODE(COL1,'ABC',1,0)), 
        SUM(DECODE(COL2,'DEF',1,0)),
        SUM(DECODE(COL3,'ABC',1,0)),
 FROM MyView
 WHERE INDICATOR IN ('GREEN','YELLOW')
 GROUP BY TYPE
 )
 WHERE TYPE = 'TYPE A'
 GROUP BY CLIENT

以这种方式,它设法返回顶部按客户端分组的行,底部显示所有客户端的所有和的总和。

但是,当我运行整个查询时,执行时间超过1分钟,只有11行需要从视图中管理。

如果我独立地运行联合的每个部分,它们每个都需要大约11秒,如果我一起运行它们,它们大约需要23秒。

但是对于最外部的查询,它需要一分钟以上的时间?

我是不是遗漏了视图的工作原理?我注意到,如果从整个查询中去掉where子句,运行整个查询只需要12秒。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2015-06-24 00:44:37

用group by rollup代替复杂的表达式怎么样?

代码语言:javascript
复制
SELECT CLIENT,
       SUM(DECODE(COL1, 'ABC', 1, 0)), 
       SUM(DECODE(COL2, 'DEF', 1, 0)),
       SUM(DECODE(COL3, 'ABC', 1, 0)),
FROM MyView
WHERE INDICATOR IN ('GREEN', 'YELLOW') AND
      TYPE = 'A'
GROUP BY ROLLUP(CLIENT)

我认为它做了你想要的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31008382

复制
相关文章

相似问题

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