暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 分布式查询join本地表想先运行本地子select

askTom 2017-04-20
222

问题描述

我有一个视图 (巨大的数据集) 在远程,和本地表。当加入它们将本地表限制到一行时,它不会首先在本地运行,它总是在远程运行完整的视图,这需要永远。尝试了几个不同的提示来帮助。

原始查询:

选择 *
来自twadmin.V _inv_charter @ sboptwc i,priadmin.repair r
其中i.repair_ord = r.order_nbr和
r.close_dt > to_date (“04/18/2017 00:00:05”,“mm/DD/YYYY HH24:MI:SS') 和
r.close_dt < to_date (“04/18/2017 00:00:10”,“mm/DD/YYYY HH24:MI:SS')
--------------------------------------------------
| Id | 操作 | 名称 |
--------------------------------------------------
| 0 | SELECT语句 | |
| 1 | 合并加入笛卡尔 | |
| 2 | 远程 | V_INV_CHARTER |<-昂贵
| 3 | 缓冲区排序 | |
| 4 | 按索引ROWID批处理的表访问 | 修复 |
| 5 | 索引范围扫描 | 修复 _ 订单 _ nbr |
--------------------------------------------------


此子句将表r限制为一行:

从priadmin中选择订单nbr。修复r
哪里r.close_dt > to_date (“04/18/2017 00:00:05”,“mm/DD/YYYY HH24:MI:SS') 和
r.close_dt < to_date (“04/18/2017 00:00:10”,“mm/DD/YYYY HH24:MI:SS')
订单 _ nbr
--------------------
TW80410857
选择1行。

尝试提示:
选择/* 驱动 _ 站点 (i) */ *
来自twadmin.V _inv_charter @ sboptwc i,priadmin.repair r
其中i.repair_ord = r.order_nbr和
r.close_dt > to_date (“04/18/2017 00:00:05”,“mm/DD/YYYY HH24:MI:SS') 和
r.close_dt < to_date (“04/18/2017 00:00:10”,“mm/DD/YYYY HH24:MI:SS')
----------------------------------------------------------------
| Id | 操作 | 名称 |
----------------------------------------------------------------
| 0 | 选择语句远程 | |
| 1 | 按全局索引ROWID批处理的表访问 | SERIAL_HISTORY |
| 2 | 索引范围扫描 | 串行历史报告 _ idx |
| 3 | 按全局索引ROWID批处理的表访问 | SERIAL_HISTORY |
| 4 | 索引范围扫描 | 串行历史报告 _ idx |
| 5 | 合并加入 | |
| 6 | 视图 | |
| 7 | 窗口排序推送等级 | |
| 8 | 哈希连接右外 | |
| 9 | 查看 | |
| 10 | 哈希连接 | |
| 11 | 表访问完全 | VENDOR_SHIP_HDR |
| 12 | 表访问完全 | VENDOR_SHIP_DTL |
| 13 | 分区范围全部 | |
| 14 | 表访问完全 | RO_HIST |
| 15 | 排序连接 | |
| 16 | 远程 | 维修 |
----------------------------------------------------------------

我真正想让它首先在本地修复表上执行的是重新运行有限数量的行数,并将其发送到远程以限制order_nbr。

我也试过:
选择 *
选择/* 否 _ 取消push_subq */
订单 _ nbr
来自priadmin。修理r
哪里
r.close_dt > to_date (“04/18/2017 00:00:05”,“mm/DD/YYYY HH24:MI:SS') 和
r.close_dt < to_date (“04/18/2017 00:00:10”,“mm/DD/YYYY HH24:MI:SS'))


(选择订单 _ nbr
来自priadmin。修理r
where r.close_dt > to_date (“04/18/2017 00:00:05”,“mm/DD/YYYY HH24:MI:SS') 和
r.close_dt < to_date (“04/18/2017 00:00:10”,“mm/DD/YYYY HH24:MI:SS'))
选择 *
来自twadmin.v_inv_charter @ sboptwc i,myq r
哪里i.repair_ord = r.order_nbr

两者都在不受repair_nbr限制的整个视图的情况下在遥控器上运行。

有什么建议吗?

专家解答

没有视图定义,很难评论,但我怀疑你在某个地方有一个分析功能?因为我们在执行计划中看到了这一点:

窗口排序推送等级

通常不可能将谓词推入具有分析功能的视图中。例如。假设你对客户有这样的看法:

create view RANKED_CUSTOMERS as
select account_num,
       customer_name,
       acct_type_code,
       rank() over ( order by sales ) as sales_ranking
from   ACCOUNTS;


我们根据每个客户的销售额对他们进行排名。

如果我这样做:

从排名中选择 *,其中account_num = 10;

然后我 * 仍然 * 必须扫描整个表,因为为了知道客户的sales_ranking,我需要查看 * 每 * 行。完成此操作后,只有 * 然后 * 可以应用以下过滤器: account_num = 10


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论