免费注册 查看新帖 |

Chinaunix

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

关于sql执行效率一问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-24 09:38 |只看该作者 |倒序浏览
大家好:
这两天我写了一段程序,其中有一段是抓数据库数据。
但总觉得速度太慢。
我想让大家帮我看一下。
SELECT tlf01,tlf02,tlf026,tlf03,tlf06,tlf10,tlf11,", '','',ima25
     FROM tlf_file,ima_file
   WHERE ima01 = tlf01 AND tlf01 matches '300*'
       AND ((tlf02 = 50 AND tlf03 = 60)
         OR (tlf02 = 60 AND tlf03 = 60)
         OR (tlf02 = 50 AND tlf03 = 90)
         OR (tlf02 = 50 AND tlf03 = 724     
         OR (tlf02 = 731 AND tlf03 = 50))  
    IF sr.tlf02 = 50 AND sr.tlf03 = 724 THEN                                   
        SELECT oga03,oga08 INTO sr.oga03,sr.oga08
          FROM oga_file,ogb_file        
         WHERE oga01 = ogb01
           AND oga01 = sr.tlf026           
           AND ogb04 = sr.tlf01                                                
     END IF                                                                     
     IF sr.tlf02 = 731 AND sr.tlf03 = 50 THEN                 
        SELECT oha03,oha08 INTO sr.oga03,sr.oga08
          FROM oha_file,ohb_file        
         WHERE oha01 = ohb01 AND oha01 = sr.tlf026               
           AND ohb04 = sr.tlf01                                                
     END IF                                                                     
     INSERT INTO sort_file VALUES (sr.*)        
其中tlf_file中共有记录 60495笔,
       ima_file共有记录22571笔,
执行的速度很慢,大家能否给我一些在大库中减少操作时间的方法。
或能否指出我的SQL就执行效率有不好的地方。
先谢谢各位了。

论坛徽章:
11
数据库技术版块每日发帖之星
日期:2016-06-25 06:20:00数据库技术版块每日发帖之星
日期:2016-06-24 06:20:00数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00数据库技术版块每日发帖之星
日期:2016-04-21 06:20:00数据库技术版块每日发帖之星
日期:2016-01-23 06:20:00数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-19 06:20:00数据库技术版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2016-07-30 06:20:00
2 [报告]
发表于 2003-04-24 13:43 |只看该作者

关于sql执行效率一问

是4gl的吧!
估计还是在循环中用的!

论坛徽章:
0
3 [报告]
发表于 2003-04-24 15:33 |只看该作者

关于sql执行效率一问

不错啊。这个语言还蛮冷门的。
有没有意见。

论坛徽章:
11
数据库技术版块每日发帖之星
日期:2016-06-25 06:20:00数据库技术版块每日发帖之星
日期:2016-06-24 06:20:00数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00数据库技术版块每日发帖之星
日期:2016-04-21 06:20:00数据库技术版块每日发帖之星
日期:2016-01-23 06:20:00数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-19 06:20:00数据库技术版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2016-07-30 06:20:00
4 [报告]
发表于 2003-04-24 17:06 |只看该作者

关于sql执行效率一问

你这么写估计是快不起来了!
循环还有这么多select
你把数据库优化一下吧!
可能会快点!

论坛徽章:
0
5 [报告]
发表于 2003-04-24 17:55 |只看该作者

关于sql执行效率一问

你是指update statistics
从sql本身执行方面有方法吗?
先谢谢了。

论坛徽章:
0
6 [报告]
发表于 2003-04-25 22:21 |只看该作者

关于sql执行效率一问

我觉得第一条SQL语句可以优化,使用临时表。
SELECT tlf01,tlf02,tlf026,tlf03,tlf06,tlf10,tlf11,", '','',ima25
into temp temp_file FROM tlf_file,ima_file
WHERE ima01 = tlf01;
然后从临时表进行查询,
我记得没错的话,速度应该会有明显提高。

论坛徽章:
0
7 [报告]
发表于 2003-04-25 22:44 |只看该作者

关于sql执行效率一问

你的语句中判断条件太多,可以拆分一下,再配合临时表就会很快。楼上说的方法如果数据量不大可以永,如果数据量太大的话就不行啦。以下供参考:select * from  tablename where id=xxx into temp tmp_file with no log;

论坛徽章:
0
8 [报告]
发表于 2003-04-28 08:43 |只看该作者

关于sql执行效率一问

谢谢各位:
楼上:id是不是指table id,
还有我想问一下,如果我建的临时表是原表的duplicate,还会出现操作临时表会快的现象吗?为什么?
在informix中做一条update的动作和做一条delete + insert 哪个会快一点。前提是这个表我建立的INDEX是按四个column name ,而且数据量大。
因为近来我在写一个数据量比较大的程序。所以我想从sql自身的效率去减少执行时间或是向各位讨教一点技艺。各位请帮忙。

论坛徽章:
0
9 [报告]
发表于 2003-04-28 18:43 |只看该作者

关于sql执行效率一问

请帮忙。         

论坛徽章:
0
10 [报告]
发表于 2003-04-28 22:20 |只看该作者

关于sql执行效率一问

1. 你从tlf_file,ima_file 这两个表联接得到的数据有几条?
2. oga_file,ogb_file,oha_file,ohb_file 这4个表的记录又分别是几条?
你的本意是不是想从tlf_file,ima_file 这2个表拿数据,放到结构sr里,然
后打开这个光标,然后根据某些字段的值再分别从oga_file,ogb_file,oha_file,ohb_file 这4个表中拿数据放到sr结构里,1条sr是你要的东西,
1条循环得到一条记录,是这样吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP