machinen 发表于 2014-7-30 13:43:09

视图套视图套视图套视图加条件的怎么优化?

在应用看到个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、有没有在不该写应用的情况下进行优化。

Maclean Liu(刘相兵 发表于 2014-7-30 14:14:16

1、没有万能钥匙 总要看 执行计划的
2、考虑用下面的一些hint 调试

unnest 、no_merge
_COMPLEX_VIEW_MERGING、"_simple_view_merging等

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

machinen 发表于 2014-7-30 14:22:50

Maclean Liu(刘相兵 发表于 2014-7-30 14:14 static/image/common/back.gif
1、没有万能钥匙 总要看 执行计划的
2、考虑用下面的一些hint 调试



感谢刘大!

这种sql执行select * from xxxx_v 完成后再来过滤xx=3或把xx=3 跟跟视图里面的条件一起合并执行区别很大,因为如果视图里面有group by 之类的操作如果改写sql把条件放在视图里面去执行结果都会不对了,头疼啊。
页: [1]
查看完整版本: 视图套视图套视图套视图加条件的怎么优化?