关于ids 9.4 查询优化问题
select *from tab1
where tab1.col1 = 1
and sp_proc(tab1.col2) = 1
其中,sp_proc是一个存贮过程,需要占用较多的时间。
表tab1已经建立列col1的索引
tab1的记录较多(几十万行)。在ids9.4上执行上述语句,需要好久才返回结果。
经查,是ids对tab1的每一行执行过程sp_proc,然后再判断col1=1是否成立。
能否指定查询的顺序,即先判断tab.col1=1是否成立,如果不成立,就不执行过程sp_proc
如果成立,再执行过程sp_proc,判断sp_proc(tab1.col2) = 1是否成立。这样,只需执行一次过程,可以大大缩短查询时间。
我记得ids 7.31就是这样查询的,怎么到了9.4反而不这样了呢?!
[ 本帖最后由 iamdinosaur 于 2007-9-30 18:04 编辑 ]
回复 #2 czw1413_cn 的帖子
但如果informix先判断第一个条件(tab1.col1 = 1),如果为false或NULL则结果为false或NULL,就不需要执行该过程。 首先执行一下update statistics high for table tab1;然后试试效果,如果还不行,就把语句写成:
select *
from tab1
where sp_proc(tab1.col2) = 1 and
tab1.col1 = 1;
再试试
回复 #4 xxyyy 的帖子
我试了一下,好象快了很多,我再检察一下,谢谢了!
页:
[1]