Birgitta 說:
DDS描述的PF的插入/刪除速度比SQL建立的來得快,但是Read的時候來得慢.
這是因為:
DDS描述的PF是在資料Get的時候進行驗證,而插入更新的時候並沒有驗證.
SQL建立的PF剛好相反,資料驗證只發生在寫,而不是讀.
正常你執行的操作是讀遠勝於寫,比例大該為80:20.
我們談論的是關於PF內部的資料驗證,而不是關於你程式的驗證.
試試如下所說的:
用DDS定義一個PF,但是使用一個固定的記錄長度
CRTPF FILE(MYLIB/MYBASEX) RCDLEN(10)
我們輸入數字和非法的數字值(比如XYU)到這個物理檔案中.
然後,建立一個DDS描述的只有一個數值型的欄位的PF.
如果你拷貝上一個檔案到新的檔案中,並指定關鍵字*NOCHK(FMTOPT),看看是否正確
CPYF FROMFILE(MYLIB/BASEPF)
TOFILE(MYLIB/DDSPF)
FMTOPT(*NOCHK)
現在我們用SQL建立一個等價於DDS描述的PF的資料庫,
並且重複用CPYF命令,這時候我們發現,Insert停止在錯誤的數位資料中.
RPG在寫入的時候並沒有作任何校正,CPYF如果沒有*NOCHK的選項的話會執行資料驗證.
資料庫物件的驗證依賴於你讀寫的方式(Native I/O或者 SQL),並且你不能關閉資料驗證或者改變它.
這就是DDS-PF和SQL-PF的架構差別.
=========
因此,我們建立表--For C/S B/S only ,如果是代碼錶或者一些什麼條件表,就是Write/Update較少的表,我們盡量用SQL建立的,否則,我們使用DDS建立的表.
==================================
沒想到後續引起了新聞群組的一陣論戰,其實DDS和SQL建立的表的效能並沒有極大的變化,但是我記得這句話是羅徹斯特裡面的一個SQL最佳化課程的老師也這麼說過。
在他們的課程中,Navigator就是all the thing.Green Screen is passive.