plsql - oracle GTT Vs IN 子句文字
问题描述
有一个查询,其中 GTT(few 100 Recs) 内部与主表连接。
ex :
insert into table1 select col2,col3 from gtt,maintable where gtt.id=maintable.id .. few other joins
查询大约需要 15-20 分钟才能加载到 table1,但是当我在查询中传递那些 GTT 表值硬编码时,它将在 4-5 分钟内完成。
这里的主要区别是什么,有什么方法可以提高使用 GTT 的性能。(不能避免 GTT,因为有时值可能超过 1000)
在下面尝试 1. 删除了内部连接并用 IN 子句替换( where IN ( 从 GTT 中选择 id ),但没有运气 2. 添加 push_subq 和 unnest HINT with subquery(option 1) ,但没有运气
计划
with GTT
| 74 | NESTED LOOPS |
| 75 | BUFFER SORT |
| 76 | PX RECEIVE |
| 77 | PX SEND BROADCAST | :TQ20006
| 78 | SORT UNIQUE |
| 79 | PX RECEIVE |
| 80 | PX SEND HASH | :TQ20005
| 81 | PX BLOCK ITERATOR |
| 82 | TABLE ACCESS STORAGE FULL | STAGE_GTT
| 83 | PX PARTITION HASH ITERATOR |
| 84 | TABLE ACCESS STORAGE FULL | EXP_TABLE =====>103GB == cell offloaded 95%
With literal
129 | PX SEND HASH | :TQ20006
130 | HASH JOIN |
131 | PX PARTITION HASH INLIST |
132 | VIEW |
133 | TABLE ACCESS STORAGE FULL | EXP_TABLE ====(27GB ) ==cell offloaded 98%
解决方案
好吧,这只是在黑暗中的一个镜头。如果你能回应我的评论,可以即兴发挥。
insert into table1 select col2,col3 from gtt
where exists (select 1 from maintable
where gtt.id=maintable.id
.. few other joins)
假设:col2,col3 来自gtt。
推荐阅读
- svg - SVG 图像嵌入到图形中。以 SVG 导出图形时,有没有办法保持其 SVG 格式?
- matlab - 复倒谱 Matlab
- symfony - 使用 Webpack encore 构建资产 - 错误:使用 configureFilenames #978 时删除 _tmp_copy 的 JS 条目时出现问题
- python - XYZ 类型的对象不是 JSON 可序列化的
- django - django 中的异步函数,它返回一个 json 响应
- python - 试图绘制一个随机函数,但它似乎不是很随机
- python - 用于存储代理路径概率的良好数据结构
- c# - 了解 Distinct() 如何与实体框架一起工作
- puppeteer - 如何防止 Akamai 检测到 puppeteer?
- angular - *hasPermission 指令的角度反应形式模型数据