zzwssfd 发表于 2014-6-19 15:32:09

原表和复制表的执行计划不一样

帮忙看下这两个执行计划为啥不一样,test20140619是复制的channel表,索引也是完全一样。

channel的统计信息是今天刚收的。

多谢。


SELECT a.* FROM  channel a start with a.parent_chn_id = 101
        connect by prior a.channel_id = a.parent_chn_id and a.status_cd = '1000'
union
select b.* from channel b where channel_id = 101;



SELECT a.* FROM test20140619 a start with a.parent_chn_id = 101
        connect by prior a.channel_id = a.parent_chn_id and a.status_cd = '1000'
union
select b.* from  channel b where channel_id = 101;

zzwssfd 发表于 2014-6-19 16:01:35

同事让用下面的方法来收集统计信息后,执行计划就一样了。exec DBMS_STATS.GATHER_TABLE_STATS(ownname=>'XXX',tabname=>'CHANNEL',ESTIMATE_PERCENT=>5,method_opt=>'for all columns size 1',cascade=>true,force=>true,degree=>8);

之前我的收集方法是:
exec DBMS_STATS.GATHER_TABLE_STATS(ownname=>'XXX',tabname=>'CHANNEL')

暂时还不知这其中的差别

zzwssfd 发表于 2014-6-19 16:02:30

新的执行计划

Maclean Liu(刘相兵 发表于 2014-6-19 16:07:53

2点
1、任何具体的问题,都要说明版本
2、除非是图形化界面问题,否则不要截图

zzwssfd 发表于 2014-6-19 16:08:47

Maclean Liu(刘相兵 发表于 2014-6-19 16:11:48

plan 1的基数计算与实际有较大差别,主要问题在于 id=3 。 但看起来这是张小表  , plan A和 plan B在性能上差距 仅是少量逻辑读

zzwssfd 发表于 2014-7-2 10:45:23

Maclean Liu(刘相兵 发表于 2014-6-19 16:11 static/image/common/back.gif
plan 1的基数计算与实际有较大差别,主要问题在于 id=3 。 但看起来这是张小表  , plan A和 plan B在性能 ...

多谢刘大大回复 ,主要是开发拿这个说事

zzwssfd 发表于 2014-7-2 10:46:04

Maclean Liu(刘相兵 发表于 2014-6-19 16:07 static/image/common/back.gif
2点
1、任何具体的问题,都要说明版本
2、除非是图形化界面问题,否则不要截图 ...

好的 以后注意 多谢提醒

TiMi 发表于 2014-7-4 14:41:05

lz的真正疑问是   2种收集统计信息方法的区别吗

zzwssfd 发表于 2014-7-24 11:13:36

TiMi 发表于 2014-7-4 14:41 static/image/common/back.gif
lz的真正疑问是   2种收集统计信息方法的区别吗

是的,为何要第二种收集方法才行

Maclean Liu(刘相兵 发表于 2014-7-24 16:31:31

zzwssfd 发表于 2014-7-24 11:13 static/image/common/back.gif
是的,为何要第二种收集方法才行

只要区别在于  ESTIMATE_PERCENT=>5,method_opt=>'for all columns size 1'

其中 method_opt ,在http://www.askmaclean.com/archives/histogram.html 中介绍过

ora_ted 发表于 2014-7-28 10:20:45

学习,学习
页: [1]
查看完整版本: 原表和复制表的执行计划不一样