免费注册 查看新帖 |

Chinaunix

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

Informix SQL性能调优疑难问题,高手近来看下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-23 03:01 |只看该作者 |倒序浏览
表1描述:giftcert(156581 rows)
{ TABLE "informix".giftcert row size = 50 number of columns = 11 index size = 36}
create table "informix".giftcert
  (
    gc_id char( not null,
    gc_orig_store char(3),
    gc_amount decimal(10,2),
    gc_type char(1),
    gc_date date,
    gc_store char(3),
    gc_invoice integer,
    gc_customer char(10),
    gc_slsman char(6),
    gc_trans integer,
    gc_extra char(1)
  ) extent size 16 next size 16 lock mode row;
revoke all on "informix".giftcert from "public";

create unique index "informix".i1giftcert on "informix".giftcert
(gc_date,gc_orig_store,gc_id,gc_invoice,gc_type);

表2描述:sap_capture_log(2085997 rows)
{ TABLE sap_capture_log row size = 33 number of columns = 5 index size = 49 }
create table sap_capture_log
  (
    type char(1),
    cap_date date,
    key1 char(20),
    key2 integer,
    key3 date
  ) extent size 16 next size 16 lock mode page;
revoke all on sap_capture_log from "public";

create index sap_cap1 on sap_capture_log (type,
    key1,key2,key3);

问一下大虾有没有办法提高一下以下SQL的性能或者指出以下SQL的问题在哪里? 谢谢。
select gc_id,gc_orig_store,gc_amount,gc_type,gc_date,gc_invoice,gc_customer,'N'
from giftcert
where gc_date between today-7 and today-1
        and gc_type="S" and
    (select count(*) from sap_capture_log
                where type="G" and key2=gc_id and key3=gc_date)=0
在一般情况下,需要3个小时才能把结果算出来,是不是太慢了,就这么个小SQL。本人对调优不是很在行,用过重建索引,重新load表,update statatistics,均不见效。

软件/硬件平台:
Compaq Proliant Server 7100/1024MB/Ultra 2 SCSI/
SCO OpenServer 5.0.4
root> memsize
1073213440
Informix Dynamic Server Version 7.31.UC2   -- On-Line -- Up 5 days 21:58:54 -- 3
68640 Kbytes

祝新年快乐!

论坛徽章:
0
2 [报告]
发表于 2005-12-23 08:27 |只看该作者
1. 调整索引看看。
create unique index "informix".i1giftcert on "informix".giftcert
(gc_date,gc_type,gc_orig_store,gc_id,gc_invoice);

create index sap_cap1 on sap_capture_log (type,
   key2,key3,key1);

2. 看看两表占用多少pages 然后按 extent = 2* pages 重建两表 装入数据,把表数据放在1个extent中。
   再运行update statistics 一下。
3. 我的一个想法,不知道有无效果。
    把select count(*) 那句 改
          not exists ( select type from sap_capture_log
                where type="G" and key2=gc_id and key3=gc_date)
   
测完后请写上测试结果。

论坛徽章:
0
3 [报告]
发表于 2005-12-23 11:30 |只看该作者

真是高手啊(我的手真低啊)

我试了1,感觉快多了。明天看生产系统的结果。-- 我关注的SQL快多了,别的慢了,但是总的性能提升了。

就没再往下试。其实我感觉磁盘IO的影响肯定有,但没有那么大。

谢谢wenlq。新年快乐!

[ 本帖最后由 chenrulai 于 2005-12-24 01:13 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP