请教 如何加提示hint 让子查询做驱动表

[复制链接]
查看11 | 回复8 | 2014-2-18 16:49:31 | 显示全部楼层 |阅读模式
本帖最后由 260600sz 于 2015-7-23 01:09 编辑
今天sql调优 1分钟优化到20秒,但是有段sql读取字节81K;
通过比较视图中union all其他的执行计划,都是子查询中表作为inshopping_info驱动表,再关联shopping_request
子查询加了qb_name(tmp) select 列加 push_subq(@tmp)还是不行,请教各位一下大神;
说明:shopping_request 过滤数据30条
子查询shopping_info表 check_flag='N'有2000W数据AND sii.safe_flag='Y'过滤数据后只有2W条,很奇怪其他union all用子查询作驱动表;
子查询shopping_info建了索引列idx1(id,safe_flag)
select .........
from shopping_request sr,

shopping_info si,

shopping_status oss
where sr.id=si.id
anddsi.code=oss.code
andsr.ups_code in('A','B')
andsi.flag='Y'
andnot exists
(select 1

from shopping_infosii

where sii.id=sr.id

and sii.check_flag='N'

and sii.safe_flag='Y'
);

回复

使用道具 举报

千问 | 2014-2-18 16:49:31 | 显示全部楼层
什么意思?想用HASH ANTI JOIN? 你得写成 NOT IN。子查询中可以加HASH_AJ提示试试。
你里面有个dii不知道从哪里来的。
回复

使用道具 举报

千问 | 2014-2-18 16:49:31 | 显示全部楼层
本帖最后由 260600sz 于 2015-7-23 01:11 编辑
newkid 发表于 2015-7-23 01:05
什么意思?想用HASH ANTI JOIN? 你得写成 NOT IN。子查询中可以加HASH_AJ提示试试。
你里面有个dii不知道从 ...
视图内容基本上不能改,只能添加提示,建表索引之类的;
dii写错了是sii,意思是让子查询的表作驱动表;
执行计划中 有的时候不是先走子查询的,版主你试下exists ;
落落有个帖子 和我的意思一样;
http://blog.csdn.net/robinson1988/article/details/10551467
回复

使用道具 举报

千问 | 2014-2-18 16:49:31 | 显示全部楼层
试试:
andsr.id NOT IN
(select /*+ HASH_AJ */ sii.id

from shopping_infosii

wheresii.check_flag='N'

and sii.safe_flag='Y'
);
回复

使用道具 举报

千问 | 2014-2-18 16:49:31 | 显示全部楼层
260600sz 发表于 2015-7-23 01:09
视图内容基本上不能改,只能添加提示,建表索引之类的;
dii写错了是sii,意思是让子查询的表作驱动表;
...

落落的方法是指定特定查询块中的哪个表做为驱动表。如果你也想这样做,需要通过执行计划知道相应查询块的名称,然后对该查询块做相应的HINT。
回复

使用道具 举报

千问 | 2014-2-18 16:49:31 | 显示全部楼层
bfc99 发表于 2015-7-23 09:17
落落的方法是指定特定查询块中的哪个表做为驱动表。如果你也想这样做,需要通过执行计划知道相应查询块的 ...

子查询块的名称加上提示不起作用/*+ leading(sii@SEL$6)*/
回复

使用道具 举报

千问 | 2014-2-18 16:49:31 | 显示全部楼层
260600sz 发表于 2015-7-23 10:43
子查询块的名称加上提示不起作用/*+ leading(sii@SEL$6)*/

提供加提示前的执行计划。
回复

使用道具 举报

千问 | 2014-2-18 16:49:31 | 显示全部楼层
提供加提示前的执行计划。

回复

使用道具 举报

千问 | 2014-2-18 16:49:31 | 显示全部楼层
统一回复:单独拿出其中一段用/*+ leading(sii)*/ 或者 子查询块名称可以将子查询作为驱动表;
封装在视图内 就不行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行