免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2651 | 回复: 4
打印 上一主题 下一主题

关于ids 9.4 查询优化问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-30 18:03 |只看该作者 |倒序浏览
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 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-10-02 20:12 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2007-10-02 23:44 |只看该作者

回复 #2 czw1413_cn 的帖子

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

论坛徽章:
0
4 [报告]
发表于 2007-10-05 16:35 |只看该作者
首先执行一下update statistics high for table tab1;

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

再试试

论坛徽章:
0
5 [报告]
发表于 2007-10-08 09:24 |只看该作者

回复 #4 xxyyy 的帖子

我试了一下,好象快了很多,我再检察一下,谢谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP