Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

0

好友

1

主题
1#
发表于 2014-7-30 13:43:09 | 查看: 4316| 回复: 2
在应用看到个sql,比如是:
select xx,xx,xxx,xx from xx_v where id=3;
打开这个视图一看,发现视图里面套了视图,另外的视图里面又套了视图
执行计划看的我想吐了,现在有点疑问,烦请帮忙看看。
1、视图套视图套视图加where条件的sql执行的过程?
是会在执行时会进行合并,把sql转换成:
select xxx from xx,xx,xx,xx where xx.xx=xx.xx and xx.xx=xx.xx and xx.xx=3
还是会先执行视图里面的过滤条件,然后再执行xx=3这个过滤,因为如果xx=3 要是放在里面执行了,这样能过滤掉很大一部分数据,如果放在外面先等视图执行完再过滤就很慢了

2、有没有一些隐含参数或其他参数来控制这种sql 合并的?


3、有没有在不该写应用的情况下进行优化。
2#
发表于 2014-7-30 14:14:16
1、没有万能钥匙 总要看 执行计划的
2、考虑用下面的一些hint 调试

unnest 、no_merge
_COMPLEX_VIEW_MERGING、"_simple_view_merging等

3、无非是用 优化器参数 or outline or SQL PROFILE

回复 只看该作者 道具 举报

3#
发表于 2014-7-30 14:22:50
Maclean Liu(刘相兵 发表于 2014-7-30 14:14
1、没有万能钥匙 总要看 执行计划的
2、考虑用下面的一些hint 调试

感谢刘大!

这种sql执行select * from xxxx_v 完成后再来过滤xx=3或把xx=3 跟跟视图里面的条件一起合并执行区别很大,因为如果视图里面有group by 之类的操作如果改写sql把条件放在视图里面去执行结果都会不对了,头疼啊。

回复 只看该作者 道具 举报

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

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-21 01:37 , Processed in 0.048320 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569