收藏本站

人工智能培训机构,上海涛德,算法工程师,数据科学家高端培训机构-上海涛德

涛德数据科学技术原创:理解什么是View Merge

2013-8-14 19:54| 查看: 2320| 评论: 0|原作者: cube

摘要: 从性能角度出发,View不是个好东西。 优化器在转换阶段很希望可以把Select中的View分解掉,使Select回归到一个单独的Select而不是多个Select。本质上,这就是View Merge。 人们可以让优化器不要鄙视View,办法是通 ...
从性能角度出发,View不是个好东西。
优化器在转换阶段很希望可以把Select中的View分解掉,使Select回归到一个单独的Select而不是多个Select。本质上,这就是View Merge。

人们可以让优化器不要鄙视View,办法是通过使用NO_MERGE提示:
  1. select /*+NO_MERGE(v)*/
  2. min(amount_sold),channel_id
  3. from (select prod_id,channel_id,amount_sold from sales where channel_id < 100) v
  4. where channel_id in (30,40) group by channel_id;
复制代码
检查执行计划, 能看到第3步为VIEW操作,表示在此处View独立地去执行Select了,你的查询是先后用两个Select进行的:

  1. ----------------------------------------------
  2. | Id  | Operation
  3. ----------------------------------------------
  4. |   0 | SELECT STATEMENT
  5. |   1 |  HASH GROUP BY
  6. |   2 |   PARTITION RANGE ALL
  7. |   3 |    VIEW
  8. |   4 |     INLIST ITERATOR
  9. |   5 |      TABLE ACCESS BY LOCAL INDEX ROWID
  10. |   6 |       BITMAP CONVERSION TO ROWIDS
  11. |*  7 |        BITMAP INDEX SINGLE VALUE
  12. ----------------------------------------------
复制代码
比如以下SQL的执行计划中透露了View Merge的发生,因为你看不到View这个Operation:
  1. select
  2. min(amount_sold),channel_id
  3. from (select prod_id,channel_id,amount_sold from sales where channel_id < 100)
  4. where channel_id in (30,40) group by channel_id;
复制代码
执行计划中有View吗?没有,View被Merge了。

  1. ---------------------------------------------
  2. | Id  | Operation
  3. ---------------------------------------------
  4. |   0 | SELECT STATEMENT
  5. |   1 |  HASH GROUP BY
  6. |   2 |   PARTITION RANGE ALL
  7. |   3 |    INLIST ITERATOR
  8. |   4 |     TABLE ACCESS BY LOCAL INDEX ROWID
  9. |   5 |      BITMAP CONVERSION TO ROWIDS
  10. |*  6 |       BITMAP INDEX SINGLE VALUE
  11. ---------------------------------------------
复制代码

<点击:上海涛德Oracle OCM认证及BI商业智能课程>|人工智能培训-上海涛德 ( 沪ICP备14006824号 )|网站地图   My title page contents

GMT+8, 2019-4-24 15:14 , Processed in 0.108911 second(s), 14 queries , Gzip On.

回顶部