首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UNION时的性能问题

使用UNION时的性能问题
EN

Stack Overflow用户
提问于 2017-07-06 16:43:29
回答 1查看 299关注 0票数 1

oracle查询中的Union导致了大量的FTS (全表扫描)和高行计数,有没有更好的方法来重写这个查询?

代码语言:javascript
复制
            SELECT
                            tab1.a1,
                            tab1.a2 ,
                            tab2.b1,
                            tab2.b2


            FROM tab1 ,tab2
                    where tab1.aid = tab2.aid
                    and tab1.bid = tab2.bid
            UNION 
            SELECT
                            tab1.a1,
                            tab1.a2,
                            tab3.c1,
                            tab3.c2
            FROM tab1 ,tab3
                    where tab1.cid = tab3.cid
                    and tab1.bid =tab3.bid;

解释计划看起来很像这样..

代码语言:javascript
复制
                 | Id  | Operation                     | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
                 ---------------------------------------------------------------------------------------
                 |   0 | SELECT STATEMENT              |  1845K|    61M|       |   120K  (1)| 00:00:05 |
                 |   1 |  UNION-ALL                    |       |       |       |            |          |
                 |   2 |   MERGE JOIN                  |  1719K|    57M|       | 98522   (2)| 00:00:04 |
                 |   3 |    SORT JOIN                  |  1761K|    25M|    94M| 30984   (1)| 00:00:02 |
                 |   4 |     TABLE ACCESS FULL         |  1761K|    25M|       | 21911   (1)| 00:00:01 |
                 |*  5 |    SORT JOIN                  |  1882K|    35M|   115M| 67538   (2)| 00:00:03 |
                 |   6 |     TABLE ACCESS FULL         |  1882K|    35M|       | 56061   (2)| 00:00:03 |
                 |   7 |   NESTED LOOPS                |   126K|  3699K|       | 22186   (1)| 00:00:01 |
                 |   8 |    NESTED LOOPS               |   126K|  3699K|       | 22186   (1)| 00:00:01 |
                 |   9 |     TABLE ACCESS FULL         |   126K|  1726K|       |  3232   (2)| 00:00:01 |

索引为on (tab1 (aid,bid),tab2(aid,bid),tab3(cid,bid))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-06 16:48:49

代码语言:javascript
复制
SELECT t.a1, t.a2  
FROM tab1 t
WHERE EXISTS (SELECT 1
              FROM tab2 t2
              WHERE t.aid = t2.aid
              AND t.bid = t2.bid)
OR EXISTS (SELECT 1
           FROM tab3 t3
           WHERE t.cid = t3.cid
           AND t.bid =t3.bid)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44943899

复制
相关文章

相似问题

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