iamdinosaur 发表于 2007-09-30 18:03

关于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 编辑 ]

czw1413_cn 发表于 2007-10-02 20:12

iamdinosaur 发表于 2007-10-02 23:44

回复 #2 czw1413_cn 的帖子

但如果informix先判断第一个条件(tab1.col1 = 1),如果为false或NULL则结果为false或NULL,就不需要执行该过程。

xxyyy 发表于 2007-10-05 16:35

首先执行一下update statistics high for table tab1;

然后试试效果,如果还不行,就把语句写成:
select *
from tab1
where sp_proc(tab1.col2) = 1 and
tab1.col1 = 1;

再试试

iamdinosaur 发表于 2007-10-08 09:24

回复 #4 xxyyy 的帖子

我试了一下,好象快了很多,我再检察一下,谢谢了!
页: [1]
查看完整版本: 关于ids 9.4 查询优化问题