1.盡量使用事務處理更新資料庫
VB的事務處理包括以BeginTrans開始,以CommitTrans或Rollback結尾的多個資料庫操作指令。事務處理除了能很好的保證資料庫的完整性以外,同時能大幅提高資料庫批量更新的效率。這是因為如果資料庫更新操作沒有使用事務處理,則每次Update操作都會引起資料庫寫盤一次。使用事務處理後,更新只在記憶體緩衝區內進行,執行CommitTrans時才將所有修改一次寫入磁碟中。使用事務處理要注意幾點:
(1)事務處理要有很完善的錯誤檢查機制;
(2)因為VB在事務處理結束前對資料庫使用了頁面鎖定.所以在多用戶環境中,如果事務被掛起,則其他用戶將無法存取上鎖的資料。
2.盡量使用程式碼分解Select檢索操作
使用Select進行資料庫操作固然簡單易用,但如果將一些檢索操作分解為等價的手工檢索程式碼,則對資料庫的檢索速度將大大加快.分解的基本方法是對檢索關鍵字段進行索引,利用Seek方法定位後,根據索引的資料庫已經排序的特點,進行遍歷查找.對於遍歷範圍不是很寬時,這種方法能幾十倍的提高資料庫的存取速度.例如:Select*frompersonwherevol='123'andbirth=#11-02-73#分解成下面的操作後,訪問速度可大大提高:
Table.Index=volTable.Seek=,123ifnottable.nomatchthen
whilenottable.eof
iftable(vol)=123then
table.movelast
elseiftable(Birth)=#11-02-73#then
'找到記錄
endif
table.movenext
wendendif
3.使用attach綁定資料庫表
當使用ODBC連接MSSQLServer,Oracle和Sysbase之類的資料庫伺服器時,我們可以透過MSAcess的attach功能將伺服器上的表綁定到MSAcess資料庫中,因為MSAcess資料庫能快取資料庫伺服器上表的結構,當我們訪問ODBC資料來源時能提升系統的存取效能。
4.使用dbSQLPassThrough選項
連接MSSQLServer,Oracle和Sysbase資料庫伺服器時,使用dbSQLPassThrough選項可將命令直接傳送給資料庫伺服器,從而減少中間件對命令的檢查和解釋,提高了資料庫的存取效能。下例使用預存程序建立Dynaset:
dimmydbasdatabasedimmydsasdynasetsetmydb=opendatabase(..........)'開啟資料庫setmyds=mydb.openrecordset(name,dbOpendynaset,dbSQLPassThrough,...)
使用dbSQLPassThrough的缺點是傳回的記錄集是唯讀的。
5.正確使用資料庫存取物件Table.
支援SEEK指令與索引.兩者配合能最快的找到紀錄.筆者曾經做過速度比較試驗,都是檢索10萬個記錄Table用時3.5秒Dynaset用時9秒Snapshot用時10秒.支援讀寫操作.不支援SORT和FILTER,必須使用Index代替.對應於資料庫中的實體表,增,刪,改會直接影響資料庫表。
Dynaset.最靈活的資料庫物件.支援讀寫操作,是記錄的動態子集.在ODBC中,寫入操作需要設定唯一性索引.支援SORT和FILTER.使用JOIN指令關聯多個表時,只能使用Dynaset。
Snapshot.只能讀不能寫,不能加鎖.不支援事務處理.不支援Edit,Addnew和Update方法。
->