问题是这样的有一个有7张表参与的查询,大体结构如下:select a.*,b.X,c.X
from (select distinct yyy from ...) a
cross join
(select distinct xxx from ....) b
crosss join
(select .... from ....) c子查询a单独查询出14行
子查询b单独查询出53行
子查询c单独查询出68行我在用语句整理这几个表之前,查询用时1秒,查询出5万多行整理后用时10秒,同样是5w多行数据,但整理后的执行计划却变了变化在于整理前b子查询位于最后一步,行计数显示700多行,占8%整理后b子查询还是位于最后一步,但行计数显示却是666400行,占到23%,下一步的distinct操作占到60%这让我非常郁闷,不知从何下手,貌似整理前三个子查询是查完后才cross join的
整理后好像是先cross join,着效率肯定高不了,求各为老师指点!!
from (select distinct yyy from ...) a
cross join
(select distinct xxx from ....) b
crosss join
(select .... from ....) c子查询a单独查询出14行
子查询b单独查询出53行
子查询c单独查询出68行我在用语句整理这几个表之前,查询用时1秒,查询出5万多行整理后用时10秒,同样是5w多行数据,但整理后的执行计划却变了变化在于整理前b子查询位于最后一步,行计数显示700多行,占8%整理后b子查询还是位于最后一步,但行计数显示却是666400行,占到23%,下一步的distinct操作占到60%这让我非常郁闷,不知从何下手,貌似整理前三个子查询是查完后才cross join的
整理后好像是先cross join,着效率肯定高不了,求各为老师指点!!
select distinct yyy into #a from ...
select distinct xxx into #b from
select .... into #c from
select a.*,b.X,c.X from #a a cross join #b b cross join #c c
drop table #a,#b,#c
试一下。找出哪个环节慢
exec showPlan_all on
因为整理前执行计划显示,用到了两张临时表操作,
所以快整理后没用临时表操作所以慢但我最想不通,为什么整理索引会导致执行计划的改变
http://community.csdn.net/Expert/topic/5428/5428951.xml?temp=.6007959