我可以使用 sql 在 AS400 中创建“逻辑文件”吗?

Posted

技术标签:

【中文标题】我可以使用 sql 在 AS400 中创建“逻辑文件”吗?【英文标题】:Can i create "logical files" in AS400 using sql? 【发布时间】:2011-01-30 09:14:37 【问题描述】:

我需要创建 as400 “逻辑文件”。

我的应用程序使用 jdbc 连接到数据库。

是否可以用 sql 语句创建“逻辑文件”?

如果是,我将不胜感激。

谢谢

【问题讨论】:

您是在尝试使用选择/省略创建逻辑文件,还是尝试为更快的查询创建新索引? @Tracy Probst 嗨,我最初的目的是创建一个物化查询,其中包含对多个表的选择以提高性能。(我对此有疑问:***.com/questions/4843521/…)。作为替代方案,我正在尝试创建一个逻辑文件,据我了解,该文件相当于物化查询,只是它用指向原始表的指针替换了实际数据(我假设它索引这些表以适应查询)。我主要关心的是性能。 我想你可能对这里的命名有点卡住了。现在称为 IBM i 操作系统的“as400”以两种基本方式之一描述文件。物理文件或逻辑文件。 SQL 表就像一个物理表。索引和视图就像逻辑。参考:wiki.midrange.com/index.php/SQL @Lynette Duffy 感谢您的链接。很有用 【参考方案1】:

我建议使用绿屏 STRSQL 命令中的 CREATE INDEX SQL 命令。然后就可以提示了。这是一个 CREATE INDEX 示例,它让我可以更快地查询 16 GB 的文件。对于此示例,物理文件是数据库监视器运行一周后的结果:

CREATE INDEX QGPL.QZG0000016_QUERYJOB ON QGPL.QZG0000016
(QQJNUM ASC, QQUSER ASC, QQJOB ASC, QQUCNT ASC, QQRID ASC, QQI5 ASC)

索引本身创建耗时较长,但后续基于该索引的查询非常快。

如果您需要连接多个表,请提前计划。了解您将用于连接表并针对连接的表创建索引的字段。您将获得所需的性能提升。例如,让我们组成一个查询来显示客户订购的商品:

SELECT ORDETAIL.ITEM_NAME, ORDETAIL.QUANTITY, ORHEADER.SHIPDATE
FROM ORHEADER
INNER JOIN ORDETAIL ON ORDETAIL.ORDERID = ORHEADER.ORDERID
WHERE ORHEADER.CUST_NUM = 123456

如果它们尚不存在,您将创建以下索引:

CREATE INDEX DATALIB.ORHEADER_BY_CUSTOMER ON DATALIB.ORHEADER (CUST_NUM ASC, ORDERID)
CREATE INDEX DATALIB.ORDETAIL_BY_ORDER ON DATALIB.ORDETAIL (ORDERID)

如果您需要创建一个逻辑文件选择/省略条件,那么您需要创建一个视图。但是,视图不是索引,并且您不能将索引和视图与带有选择/省略的键控逻辑混合在一起。为此,DDS 规范仍然是最好的。

【讨论】:

谢谢特蕾西。你的回答很有价值。但是我正在寻找一种不使用“绿屏”的解决方案 Aba,CREATE INDEX SQL 命令不需要绿屏。这很有帮助,因为您可以提示。上面列出的命令可以通过 ODBC 正常工作。 +1 如何为性能创建索引(逻辑文件)的好例子 我还将 ORDERID 添加到您的客户索引的末尾; (CUST_NUM ASC,ORDERID)。然后优化器将首先使用该索引,拿起指向 id 的指针并猛击到第二个索引。快快。这就像连接点:)【参考方案2】:

如果您尝试根据自己的视图进行排序,这将有所帮助,但如果您遇到性能问题,这将无济于事。

数据样本basetable

A 
B 
C 
A 
A 
A 

查询:

create view myview1  as                   
select lib                                
from(                                     
  SELECT rank() over(order by lib), lib   
FROM basetable) a   

来自myview1的数据样本

A 
A 
A 
A 
B 
C 

【讨论】:

【参考方案3】:

为了实现大部分相同的效果,我在 AS/400 DB2 中的所有表上创建了数据库视图,将更易于理解的名称映射到物理名称。我不认为视图逻辑文件,但我只是所说的 AS/400 的用户,并且对它的了解与与数据交互所需的一样多。

【讨论】:

视图的问题在于,当您需要从视图中获取数据时,会执行它们的“构建”查询。逻辑文件类似于物化视图,会自动更新,但不是保存数据,而是它们具有“指针”或它们所基于的表行的索引。所以从他们那里获取数据会更快 @Aba Dov :确实,打开视图可能比打开原生 LF 需要更长的时间(在我的小型 515 上大约需要 0.003 秒)。但同样如此,在两者上完成的顺序 I/O 越多,视图的速度差异就会赶上并通过 LF。交叉可能是在读取大约 75K 行之后。因此,要处理的行数可能是一个因素,尤其是在表变大的情况下。对于最大的表,视图可以轻松胜过 LF。

以上是关于我可以使用 sql 在 AS400 中创建“逻辑文件”吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2016 中创建图表

如何使用 cmd 在 SQL 中创建存储过程?

使用 .NET 连接到 AS400

AS400 - 令牌“!”无效

AS400多成员文件SQL查询

使用 SQL 从 AS400 中提取数据的问题