2011-01-30 194 views
1

我需要創建as400「邏輯文件」。我可以使用sql在AS400中創建「邏輯文件」嗎?

我的應用程序通過jdbc連接到數據庫。

是否可以用sql語句創建「邏輯文件」?

如果是,我將不勝感激舉例說明。

感謝

+1

數據

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

樣品你們是不是要創建選擇/邏輯文件遺漏或有你試圖爲更快的查詢創建一個新的索引? – 2011-01-31 13:48:21

+1

@Tracy Probst嗨,我最初的目的是創建一個物化查詢,其中包含多個表的選擇性能(我有這個問題:http://stackoverflow.com/questions/4843521/not-able-to-create - 實體查詢-ON-AS400)。作爲替代方案,我試圖創建一個邏輯文件,據我的理解,它相當於物化查詢,只是它用指向原始表的指針(我假設它索引那些表以適合查詢)替換實際數據。我主要關心的是性能。 – 2011-01-31 14:34:33

+2

我想你可能在這裏的術語上有點卡住了。現在稱爲IBM i操作系統的「as400」以兩種基本方式之一來描述文件。無論是物理還是邏輯文件。一個SQL表就像一個物理表。索引和視圖就像邏輯。參考:http://wiki.midrange.com/index.php/SQL – 2011-02-03 16:33:31

回答

5

我建議使用綠屏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) 

如果您需要創建一個邏輯文件選擇/省略標準,那麼你需要創建一個視圖。儘管一個視圖並不是一個索引,但你不能像索引和視圖那樣通過帶有select/omits的鍵控邏輯來混合。爲此,DDS規格仍然是最好的。

0

實現了在AS/400 DB2中的所有表許多相同的效果,我創建數據庫視圖,映射更容易理解的名稱到物理的。我不認爲視圖邏輯文件,但我只是所述AS/400的用戶,並且完全瞭解與數據交互所需的信息。

1

如果您嘗試在您的視圖中進行訂購,這將有所幫助,但如果您遇到性能問題,這將無法幫助您。數據

樣品basetable

A 
B 
C 
A 
A 
A 

查詢:從myview1

A 
A 
A 
A 
B 
C 
相關問題