导入后新的执行计划比旧的执行计划cost要小,很可能是统计信息的问题.当然也有可能是系统参数,服务器性能,表存储参数
参数等有关.
先执行一下:
begin
dbms_stats.gather_table_stats('SMC','POS_SOUT',estimate_percent => 30,cascade => true);
dbms_stats.gather_table_stats('SMC','POS_SOUT_DETL',estimate_percent => 30,cascade => true);
dbms_stats.gather_table_stats('SMC','PT_PART',estimate_percent => 30,cascade => true);
end;
看看情况.
如果不行,试试在语句select后加/*+leading(PT_PART,POS_SOUT,POS_SOUT_DETL)*/看会不会走原来的计划再说,
如果不行,试试在语句select后加/*+use_hash(POS_SOUT,POS_SOUT_DETL)*/试试

解决方案 »

  1.   

    新库没有采集统计信息,手动重新采一下
    特别是SMC.POS_SOUT表,严重偏差
      

  2.   

    是表的分析信息有问题,重新analyze 就好了,多谢!!
      

  3.   

    导出导入有个statistics参数来控制,但是特别在exp/imp中,如果跨版本或者字符集不同,很容易出问题。所以经常不导的,导入以后再重新采集
      

  4.   

    LZ好牛,细心观察下发现 Cardinality的确是相差很大。