1.盡量使用事務(wù)處理更新數(shù)據(jù)庫
VB的事務(wù)處理包括以BeginTrans開始,以CommitTrans或Rollback結(jié)尾的多條數(shù)據(jù)庫操作指令。事務(wù)處理除了能很好的保證數(shù)據(jù)庫的完整性以外,同時(shí)能大大提高數(shù)據(jù)庫批量更新的效率。這是因?yàn)槿绻麛?shù)據(jù)庫更新操作沒有使用事務(wù)處理,則每次Update操作都會(huì)引起數(shù)據(jù)庫寫盤一次。使用事務(wù)處理后,更新只在內(nèi)存緩沖區(qū)內(nèi)進(jìn)行,執(zhí)行CommitTrans時(shí)才將所有修改一次寫回到磁盤中。使用事務(wù)處理要注意一下幾點(diǎn):
(1)事務(wù)處理要有很完善的錯(cuò)誤檢查機(jī)制;
(2)因?yàn)閂B在事務(wù)處理結(jié)束前對(duì)數(shù)據(jù)庫使用了頁面鎖.所以在多用戶環(huán)境中,如果事務(wù)被掛起,則其他用戶將無法訪問上鎖的數(shù)據(jù)。
2.盡量使用代碼分解Select檢索操作
使用Select進(jìn)行數(shù)據(jù)庫操作固然簡單易用,但如果將一些檢索操作分解為等價(jià)的手工檢索代碼,則對(duì)數(shù)據(jù)庫的檢索速度將大大加快.分解的基本方法是對(duì)檢索關(guān)鍵字段進(jìn)行索引,利用Seek方法定位后,根據(jù)索引的數(shù)據(jù)庫已經(jīng)排序的特點(diǎn),進(jìn)行遍歷查找.對(duì)于遍歷范圍不是很寬時(shí),這種方法能幾十倍的提高數(shù)據(jù)庫的訪問速度.例如:Select * from person where vol= '123' and birth= #11-02-73# 分解成下面的操作后,訪問速度可大大提高:
Table.Index= "vol"Table.Seek "=","123"if not table.nomatch then
while not table.eof
if table("vol")="123" then
table.movelast
else if table("Birth")= #11-02-73# then
'找到記錄
end if
table.movenext
wendend if
VB的事務(wù)處理包括以BeginTrans開始,以CommitTrans或Rollback結(jié)尾的多條數(shù)據(jù)庫操作指令。事務(wù)處理除了能很好的保證數(shù)據(jù)庫的完整性以外,同時(shí)能大大提高數(shù)據(jù)庫批量更新的效率。這是因?yàn)槿绻麛?shù)據(jù)庫更新操作沒有使用事務(wù)處理,則每次Update操作都會(huì)引起數(shù)據(jù)庫寫盤一次。使用事務(wù)處理后,更新只在內(nèi)存緩沖區(qū)內(nèi)進(jìn)行,執(zhí)行CommitTrans時(shí)才將所有修改一次寫回到磁盤中。使用事務(wù)處理要注意一下幾點(diǎn):
(1)事務(wù)處理要有很完善的錯(cuò)誤檢查機(jī)制;
(2)因?yàn)閂B在事務(wù)處理結(jié)束前對(duì)數(shù)據(jù)庫使用了頁面鎖.所以在多用戶環(huán)境中,如果事務(wù)被掛起,則其他用戶將無法訪問上鎖的數(shù)據(jù)。
2.盡量使用代碼分解Select檢索操作
使用Select進(jìn)行數(shù)據(jù)庫操作固然簡單易用,但如果將一些檢索操作分解為等價(jià)的手工檢索代碼,則對(duì)數(shù)據(jù)庫的檢索速度將大大加快.分解的基本方法是對(duì)檢索關(guān)鍵字段進(jìn)行索引,利用Seek方法定位后,根據(jù)索引的數(shù)據(jù)庫已經(jīng)排序的特點(diǎn),進(jìn)行遍歷查找.對(duì)于遍歷范圍不是很寬時(shí),這種方法能幾十倍的提高數(shù)據(jù)庫的訪問速度.例如:Select * from person where vol= '123' and birth= #11-02-73# 分解成下面的操作后,訪問速度可大大提高:
Table.Index= "vol"Table.Seek "=","123"if not table.nomatch then
while not table.eof
if table("vol")="123" then
table.movelast
else if table("Birth")= #11-02-73# then
'找到記錄
end if
table.movenext
wendend if