Oracle分布式查询语句的性能优化
分析:
由于优化器无法判断或获得远端表的统计信息,故原执行计划默认会采取把远程表(无论大小)拉到本地再连接的方式执行,
这样如果远程表较大的情况将会比较缓慢,像上述查询耗时在1分钟以上。
原SQL语句:
SelectWb.*,(SelectWi.NextarrivedateFromMbs7_Oms.Xs_Warearriveinfo@Dc.Moonbasadb.ComWiWhereWi.Warecode=Wb.Warecode)AsNextarrivedateFromMbs7_Crm.Wi_Warebase@Dc.Moonbasadb.ComWb---这里远端表较大InnerJoin(SelectWa.Stylecode,Max(Wa.Warecode)AsWarecodeFromMbs7_Crm.Wi_Warebase@Dc.Moonbasadb.ComWaInnerJoin(SelectStylecodeFromDc_Support.Kh_VisitpageVisWhereVis.Cuscode=:B1AndVis.Addtime>=Trunc(Sysdate-31)AndVis.Addtime<Trunc(Sysdate-30)AndRownum<=5OrderByAddtimeDesc)VisOnWa.Stylecode=Vis.StylecodeGroupByWa.Stylecode)WcOnWb.Warecode=Wc.Warecode
解决方案:
用以下HINTS方式加上去后,优化器会调整执行计划,把运算端控制在WB,并且远端表MBS7_CRM.WI_WAREBASE表字段的索引(STYLECODE)缺少连接索引,于是在目标端创建以下索引进行优化,优化后COST从7百多下降到20,运行2秒内可返回结果,性能增加不少。
远端表创建索引:
createindexmbs7_crm.ix_WI_WAREBASE_STYLECODEonmbs7_crm.WI_WAREBASE(STYLECODE)
调优后的SQL:
Select/*+DRIVING_SITE(WB)*/Wb.*,(SelectWi.NextarrivedateFromMbs7_Oms.Xs_Warearriveinfo@Dc.Moonbasadb.ComWiWhereWi.Warecode=Wb.Warecode)AsNextarrivedateFromMbs7_Crm.Wi_Warebase@Dc.Moonbasadb.ComWb---远端表较大InnerJoin(SelectWa.Stylecode,Max(Wa.Warecode)AsWarecodeFromMbs7_Crm.Wi_Warebase@Dc.Moonbasadb.ComWaInnerJoin(SelectStylecodeFromDc_Support.Kh_VisitpageVisWhereVis.Cuscode=:B1AndVis.Addtime>=Trunc(Sysdate-31)AndVis.Addtime<Trunc(Sysdate-30)AndRownum<=5OrderByAddtimeDesc)VisOnWa.Stylecode=Vis.StylecodeGroupByWa.Stylecode)WcOnWb.Warecode=Wc.Warecode
©版权声明:本文为天凯DBS的原创文章,转载请附上原文出处链接及本声明,否则将追究法律责任。
原文链接:https://dbs-service.cn/a/173.html
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。