sql优化
sql类似:
select col1,col2,...coln
from v_view1
where col1='...'
and col...
其中v_view1又是类似于
select v1col1,v1col2,...v1coln
from v_view2
where ...
而v_view2类似于
select v2col1,v2col2,...,v2coln
from table1
where v2col1!=...
and not ...
这样的sql我搞了半天,对不等于,对not这种都不好优化.
而sql的执行计划,竟然对一个数据量比较大的表进行了6次全表扫描.而这个表每天数据都在疯狂的增长.在plsql/devloper下执行一次要花时10秒左右.
是不是优化没法进行了?
从理论上来说,sql的优化就是尽量减少数据库的读与写.而这个sql有6次全表扫描,视图又不能用动态参数.
最后没法,用了一个最原始的办法.重写sql.
将视图还原sql嵌在里面,对每个条件都行审查,最后发现,在最外边的那个条件,可以利用索引.于是,将外面的条件移到最里面的视图的那个sql去.因为用了变量,所以不能用视图了.
这样就保证了,在里面取基表数据的时候就走索引扫描,由原来cost有4000多,下降到只有几十了.而执行一次也花费不到0.02秒.
最后再记住:sql的优化就是减少数据库读写写.
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11419868/viewspace-1007956/ ,如需转载,请注明出处,否则将追究法律责任。