性能优化:JPPD(连接谓词下推)在哪些情况下生效

我们的文章会在微信公众号Oracle恢复实录和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!

由于博客中有大量代码,通过页面浏览效果更佳。

连接谓词推入(Join Predicate Pushdown)是优化器处理带视图的目标SQL的另外一种优化手段,它是指虽然优化器还是会把该SQL中视图的定义SQL语句当作一个独立的处理单元来单独执行,但此时优化器会把原本处于该视图外部查询中和该视图之间的连接条件推入到该视图的定义SQL浯句内部,这样做是为了能使用上该视图内部相关基表上的索引,进而能走出基于索引的嵌套循环连接。

之前提到:Oracle在做连接谓词推入时会考虑成本,只有经过连接谓词推入后走嵌套循环连接的等价改写SQL的成本值小于原SQL的成本值时,Oracle才会对目标SQL做连接谓词推入。

1,有不能被合并的视图。

2,对视图有where条件过滤视图的数据。

3,如果是连接列推入到VIEW中,那里索引中连接列所在的表在连接列上要存在索引

4,如果不是连接列推入到VIEW中,可以不需要索引。

一般我们看到视图中为NL的被驱动表的时候,想办法改变,走HASH连接。

下面是来至MOS

plain_text 复制代码
• unmerged views
• outer-joined views
• union[all] views
• Anti/Semi joined views (11g)
• Group by views (11g)
• DISTINCT views (11g)

下面来至崔华老师的书

oracle是否能做连接谓词推入与目标视图的娄型、该视图与外部查询之间的连接类型以及连接方法有关。到目前为止,Oracle仅仅支持对如下类型的视图做连接谓词推入"

·视图定义SQL语句中包含UNION 复制代码
·视图定义SQL语句中包含DISTINCT的视图
·视图定义SQL语句中包含GROUPBY的视图
·和外部查询之间的连接类型是外连接的视图
·和外部查询之间的连接方法是反连接的视图
·和外部查询之间的连接方法是半连接的视图

11G新增加的这几个功能受下面参数控制的

_optimizer_extend_jppd_view_types()控制

v如下

SELECT 复制代码
         *
     FROM scott.htz1 a,
          scott.htz2 b,
          (  SELECT owner
               FROM scott.htz3 c
              WHERE c.object_id > 1000) d
    WHERE a.owner = b.owner AND b.CREATED > SYSDATE - 1 AND a.owner = d.owner(+);

这里通过强制提示no_merge来提示SQL不合并。不然视图要合并的

Execution 复制代码
----------------------------------------------------------
Plan hash value: 475521106

----------------------------------------------------------------------------------------------
| Id  | Operation               | Name       | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT        |            |    73G|    14T|       |    29M  (1)| 97:53:05 |
|   1 |  NESTED LOOPS OUTER     |            |    73G|    14T|       |    29M  (1)| 97:53:05 |
|*  2 |   HASH JOIN             |            |  2442K|   456M|  9288K|  1149   (1)| 00:00:14 |
|   3 |    TABLE ACCESS FULL    | HTZ1       | 86448 |  8273K|       |   345   (1)| 00:00:05 |
|*  4 |    TABLE ACCESS FULL    | HTZ2       |    80 |  7840 |       |   346   (1)| 00:00:05 |
|   5 |   VIEW PUSHED PREDICATE |            |  1312 | 22304 |       |    12   (0)| 00:00:01 |
|*  6 |    INDEX RANGE SCAN     | IND_HTZ3_2 |  3716 | 40876 |       |    12   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("A"."OWNER"="B"."OWNER")
   4 - filter("B"."CREATED">SYSDATE@!-1)
   6 - access("OWNER"="A"."OWNER" AND "C"."OBJECT_ID">1000 AND "C"."OBJECT_ID" IS NOT
              NULL)


Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
       2513  consistent gets
          0  physical reads
          0  redo size
       7670  bytes sent via SQL*Net to client
        666  bytes received via SQL*Net from client
         15  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        198  rows processed

------------------作者介绍-----------------------

姓名:黄廷忠

现就职:Oracle中国高级服务团队

曾就职:OceanBase、云和恩墨、东方龙马等

电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)


相关推荐
ly76895 小时前
Redis 内存优化与性能调优:编码转换、内存碎片与慢查询的定位链路
redis·性能调优·内存优化·慢查询·编码转换
gwf2162 天前
QP状态机详解:Reset→Init→RTR→RTS与建链握手过程
性能调优·rdma·qp状态机·linux内核驱动·ib_modify_qp·cm建链·irdma
gwf2163 天前
Completion Queue(CQ)与中断处理:轮询、中断聚合与错误码 —— 面向AI集群的驱动级深度剖析
驱动开发·性能调优·pcie·rdma·ai集群·中断聚合·cq
AI智讯中枢10 天前
高性能 C++ 实战 (五):perf+FlameGraph 火焰图生产实战,精准定位 CPU / 缓存 / 锁瓶颈,避坑 + 完整实操案例
linux·c++·性能调优·性能分析·perf·flamegraph·火焰图
Web3&Basketball19 天前
Agent外传审计实战:3类失准事故拦截脚本
python·大模型·agent·性能调优·推理优化
hanchenxing19 天前
MySQL深分页优化:游标分页 vs 延迟关联 vs 子查询,实测对比MySQL
性能调优·分页优化
liferecords20 天前
第 6 讲 · KSYS 实战:用数据定位瓶颈,而不是靠猜
性能调优·性能分析·鲲鹏·ksys·devkit
gwf21625 天前
NVMe/RDMA传输层协议深度解析:RDMA原理、Queue Pair映射、内核实现与性能全栈剖析
linux内核·ssd·nvme·性能调优·rdma·存储协议·nvme/rdma
gwf2161 个月前
NVMe/TCP传输层协议深度解析:PDU格式、内核实现、性能调优全栈剖析
linux内核·ssd·nvme·性能调优·nvme-of·存储协议·nvme/tcp
智码看视界1 个月前
Spark 3.5 AQE 调优:10 个生产环境案例让作业提速 3-10 倍
大数据·spark·性能调优·aqe·sparksql·数据倾斜·etl优化