昨天凌晨的操作太失败了,花了3个小时,居然只完成了3个子表的数据订正(一共16个),其中有中间有个步骤需要花1个小时左右的时间。 其实仔细想想也应该是不对的,我使用了hash jion,数据量t1 1600w, t2 100w的样子,应该是不需要那么久。 不过深更半夜的脑袋肯定没有那么好使,没有想出为什么。
白天在公司的时候,总觉得花那么长时间决定是不对的,就分析了一下其中的执行计划,不分析不知道啊。 居然没有用到 hash jion,而是走了nest loop。。。 因为我是想的肯定是走hash jion的,当然不会再多花一步去给临时表t2建个索引了,结果还走了 full table scan,那么一个小时也就可以明白是为什么了。看看我错误的地方:
hint应该是:/*+ ordered use_hash (t2,t1) */
而我之前是:/*+ order hash (t2,t1) */ 天呐,怎么会写成这个样子的
                hint应该是:/*+ ordered use_hash (t2,t1) */
而我之前是:/*+ order hash (t2,t1) */ 天呐,怎么会写成这个样子的
执行时间分析:
/*+ order hash (t2,t1) */ 因为没有索引,hint又错了,耗时60mins 如果有索引的话也应该快很多很多
/*+ ordered use_hash (t2,t1) */ 用时70s
/*+ ordered use_hash (t2,t1) parallel (t1,5) */ 用时 15s, 将大表t1并行度加到5
60mins --> 15s 整整240倍
以后要多多仔细,对于有疑问的地方必须仔细考虑。 多多分析执行计划
--EOF--
This work is licensed under a CC A-S 4.0 International License.