Oracle
谓词推入 标签描述

问题概述 在分析客户环境的一条SQL时,发现了无法做谓词推入的现象。造成视图中的大表访问比较低效。故此对案例做了进一步分析及测试。以确定问题原因。 问题SQL: SELECTSUM("A2"."PREM") FROM((SELECT"A5"."AGENT_ID",SUM("A5"."PREM")"PREM" FROMQUERY_DES"A5" GROUPBY"A5"."AGENT_ID") UNIONALL (SELECT"A4"."AGENT_ID",SUM("A4"."PREM")PREM FROMQUERY_OLD"A4" GROUPBY"A4"."AGENT_ID"))"A2", T...

概念描述 谓词推入(PushingPredicate):当SQL语句中包含不能合并的视图,同时视图有谓词过滤(也就是where过滤条件),CBO会将谓词过滤条件推入视图中,这个过程就叫作谓词推入。谓词推入的主要目的就是让Oracle尽可能早地过滤掉无用的数据,从而提升查询性能。为什么谓词推入必须要有不能被合并的视图呢?因为一旦视图被合并了,执行计划中根本找不到视图,这个时候谓词往哪里推呢?所以谓词推入的必要前提是SQL中要有不能合并的视图。 测试验证 我们先创建一个不能被合并的视图(视图中有unionall)。 createorreplaceviewv_pushpredicateas sel...