免费注册 查看新帖 |

Chinaunix

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

急啊!为什么同样的查询条件,主表和逻辑表的速度差那么多啊! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-06 19:16 |只看该作者 |倒序浏览
我们系统上有1个表TB1,它有8个逻辑文件(分别命名为TB1L01, TB1L02,..., TB1L08 ),这个表目前大约是400W的数据量。
主表的关键字是CLIENTID, TB1L08的关键字是DJRQ(登记日期),整个表大约有80个字段,DJRQ在主表中的位置是大约第10个字段

我用STRSQL进行数据查询:
SELECT * FROM TB1 WHERE DJRQ>=20110501 AND DJRQ<=20110506,速度比较快,大约1秒钟就出来了
如果我用:
SELECT * FROM TB1L08 WHERE DJRQ>=20110501 AND DJRQ<=20110506,速度很慢,查了将近1分45秒

关键是20110501后,其实数据库中根本就没有记录的。查询有记录的数据也是同样慢。

我觉得这是有点无法理解!同样的2张表,按照TB1L08的关键字查,反而比主表慢,这是什么原因啊!

我的程序中,OPNQRYF连接以上条件,虽然我指定TB1,但是我感觉它默认使用了TB1L08,因为运行速度非常慢!

这要如何解决?

论坛徽章:
0
2 [报告]
发表于 2011-05-06 19:27 |只看该作者
求各位指点

论坛徽章:
0
3 [报告]
发表于 2011-05-06 20:05 |只看该作者
组织啊,帮帮我吧~~~

论坛徽章:
0
4 [报告]
发表于 2011-05-06 21:49 |只看该作者
找个时间对TB1执行RGZPFM数据清理,提高读写和查询效率.
另外,"我的程序中,OPNQRYF连接以上条件,虽然我指定TB1,但是我感觉它默认使用了TB1L08,因为运行速度非常慢!这要如何解决?",你重新debug跟踪下你的程序,看是否如此.

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-08-03 06:20:00
5 [报告]
发表于 2011-05-06 22:46 |只看该作者
本帖最后由 tomroom 于 2011-05-06 22:55 编辑

楼主导致这样情况 很多, 表若有大量频繁删除insert操作 强烈推荐轻舟大哥前面建议停系统做整理 提高访问速度。 你试试 该下你的语句 如下 你跑下试试 情况如何? 我看过IBM DB2 SQL优化文章里面 下面语句 更推荐, 如果你TB1L08 里KEY 就只是 是 DJRQ 下。你试下

SELECT * FROM TB1L08 WHERE DJRQ BETWEEN (20110501  20110506)

请教这个表和系统 是那个国内那个公司开发的

论坛徽章:
0
6 [报告]
发表于 2011-05-07 01:13 |只看该作者
猜测逻辑文件用了 select 或者 omit的键字。并且DYNSLT也起作用了。

论坛徽章:
0
7 [报告]
发表于 2011-05-07 13:41 |只看该作者
回复 1# greatmj001

首先,OS400是一个非常特殊的操作系统,即数据库操作系统。在OS400下,DB2/400是OS400的基础,几乎所有的OS操作都是建立在DB2/400上。顺便说一下,DB2/400的版本与OS400版本一致。

在OS400下,DB2/400有两个数据驱动:1)CQE,传统的(RPG)查询驱动;2)SQE,SQL 查询驱动。IBM的硬件驱动在这两个驱动之间有一个优化选择器,是微码级的操作。在OS400下,RPG用F表指定进行操作,优化器就选择CQE驱动。上面的例子数据中,如果采用TB1L08 LF文件用RPG操作,速度决定是最快的。楼主说的,如果sql语句采用表(PF)TB1进性操作,因为TB1表下已经存在满足where条件的index数据集,即TB1L08,优化器会自动采用这个索引集,即sqe查询系统自动采用cqe的索引集,速度的延时组要是sqe转向cqe索引,因为优化器是微码级的操作,速度影响,IBM基本做到最快速度操作。

楼主的采用TB1L08文件,即CQE的索引文件在SQE下进行操作,这类的转向操作所花费的时间,比sqe直接操作,优化器采用存在的cqe索引集的速度肯定比较花费时间多。在较高版本的os400对sqe的支持力度几乎都是微码级的操作,在v5r2之前,都是os400进行转换操作,而不是微码级操作,会影响执行效率。顺便说一下,v5r4下,os400才完善主要的sql操作的微码级操作。但是os400仍然保留转换操作,如果没有满足os400下的sql微码操作的条件,os400仍然采用转换操作,就像楼主的测试数据放映一样,执行速度无法与微码操作速度相比。

评分

参与人数 1可用积分 +2 收起 理由
fairyboy + 2 受教了,有学到新知识啦。

查看全部评分

论坛徽章:
0
8 [报告]
发表于 2011-05-07 14:01 |只看该作者
本帖最后由 passthru 于 2011-05-07 14:12 编辑

我在想,用“SELECT * FROM TB1L08 WHERE DJRQ>=20110501 AND DJRQ<=20110506,速度很慢,查了将近1分45秒”,是不是在执行期间,在TB1下创建一个满足TB1L08索引条件的index。如果可以测试,如果创建这个index的时间上限接近1分45秒,这种说法就非常有可能存在。

如果““SELECT * FROM TB1L08 WHERE DJRQ>=20110501 AND DJRQ<=20110506”测试重复几十次,执行速度接近1秒,就肯定上面的假设是存在的。

楼主有兴趣,如果做完这个测试,请把结果贴出来,完善这个帖子内容。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-08-03 06:20:00
9 [报告]
发表于 2011-05-07 16:39 |只看该作者
猜测逻辑文件用了 select 或者 omit的键字。并且DYNSLT也起作用了。
osky555 发表于 2011-05-07 01:13


楼主 把你表的layout 都贴上吧,详细些

论坛徽章:
0
10 [报告]
发表于 2011-05-07 20:09 |只看该作者
逻辑文件,数据量多了,先按key进行索引排序,拿一定是慢啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP