現(xiàn)在vr技術(shù)發(fā)展怎么樣了【淺談VFP中的RUSHMORE技術(shù)】
發(fā)布時間:2020-02-16 來源: 短文摘抄 點擊:
摘要:本文在Visual FoxPro中用實例驗證不同情況下使用RushMore技術(shù)對查詢速度的影響,討論這項技術(shù)的基本特點,并根據(jù)其特點提出優(yōu)化程序結(jié)構(gòu)的方法,以達(dá)到加快數(shù)據(jù)訪問的目的。
關(guān)鍵詞:RushMore技術(shù);VFP;索引
中圖分類號:TP311.13 文獻(xiàn)標(biāo)識碼:A
數(shù)據(jù)查詢是數(shù)據(jù)庫技術(shù)非常重要的一個部分,數(shù)據(jù)查詢速度的快慢直接影響到程序的執(zhí)行效率。在VFP中引入索引的概念來解決大型數(shù)據(jù)庫中數(shù)據(jù)查詢問題,RushMore技術(shù)是VFP中的一種數(shù)據(jù)查詢技術(shù),它利用索引優(yōu)化對數(shù)據(jù)的訪問。使用RushMore技術(shù),對一些復(fù)雜的表操作時比不使用這項技術(shù)要快成百上千倍,因此,能否正確運用這種技術(shù)對程序的執(zhí)行效率有著意想不到的作用。
1 RushMore技術(shù)實例耗時分析
既然RushMore技術(shù)在VFP中有著如此重要的作用,那它是如何加快數(shù)據(jù)查詢的呢?它在所有的情況下都可以隨意使用嗎?下面,我們利用以下程序?qū)ζ渥鲆粋簡單測試。
首先,建立一個名字為jilu.dbf的表,該表有一個字段“數(shù)據(jù) c(10)”,并根據(jù)字段“數(shù)據(jù)”建立一個名為“jilu”的索引。再建立并執(zhí)行如下程序prog1.prg:
use jilu index jilu
for jiluhao=1 to 900000
append blank
replace 數(shù)據(jù) with “Visual”
endfor
go 99
replace數(shù)據(jù)with“FoxPro”
go 34555
replace數(shù)據(jù)with “FoxPro”
go 75678
replace 數(shù)據(jù) with “FoxPro”
該程序的作用是向新建立的jilu表中添加90萬條數(shù)據(jù)為“Visual”的記錄,并把其中的第99、34555、75678條記錄中的數(shù)據(jù)更改為“FoxPro”。
1.1 在有索引的表中使用RushMore技術(shù)
現(xiàn)在,首先確保jilu表已經(jīng)打開并且在當(dāng)前正在使用的工作區(qū)中,然后建立并執(zhí)行如下程序prog2.prg:
set optimize off
ks=second()
display all for 數(shù)據(jù)=“FoxPro”
js=second()
? “不使用RushMore技術(shù)時,程序用時:”+str(js-ks,5,3)+“秒”
set optimize on
ks=second()
display all for 數(shù)據(jù)=“FoxPro”
js=second()
? “使用RushMore技術(shù)時,程序用時:”+str(js-ks,5,3)+“秒”
在這個程序中用變量“ks”記錄查詢開始的時間,用變量“js”記錄查詢結(jié)束的時間,然后用表達(dá)式“js-ks”計算在查詢?nèi)齻數(shù)據(jù)為“FoxPro”的記錄時所需要的耗時量。程序中分別用Set Optimize On和Set Optimize Off開啟和關(guān)閉RushMore技術(shù),最終屏幕上會分別顯示出在這兩種情況下程序查找三條“FoxPro”數(shù)據(jù)所需的時間。表1為五次實驗結(jié)果,從該表中我們可以發(fā)現(xiàn)當(dāng)開啟RushMore技術(shù)時耗時量平均值為0.003秒,而關(guān)閉RushMore技術(shù)時耗時量平均值為3.373秒。很明顯,在有索引的普通表中開啟了RushMore技術(shù)后查詢速度能夠快上千倍。
1.2 在沒有索引的表中使用RushMore技術(shù)
現(xiàn)在,將jilu表中的索引jilu刪除后再次執(zhí)行程序prog2.prg,實驗結(jié)果如表2所示:開啟RushMore技術(shù)時耗時量平均值為3.280秒,而關(guān)閉RushMore技術(shù)時耗時量平均值為3.337秒。從實驗結(jié)果中可以發(fā)現(xiàn)在沒有索引的普通表中開啟RushMore技術(shù)幾乎沒有加快數(shù)據(jù)的查詢速度,因此,在沒有索引的表中,RushMore對程序效率沒有明顯的優(yōu)化效果。
1.3 在SQL語句中使用RushMore技術(shù)
重新為jilu表建立一個索引,然后再建立并執(zhí)行如下程序prog3.prg:
set safety off
set optimize off
ks=second()
select * from jilu where 數(shù)據(jù)=“FoxPro” into table temp
js=second() &&記錄操作結(jié)束時間
? “不使用RushMore技術(shù)時,程序用時:”+str(js-ks,5,3)+“秒”
set optimize on
ks=second()
select * from jilu where 數(shù)據(jù)=“FoxPro” into table temp1
js=second()
? “使用RushMore技術(shù)時,程序用時:”+str(js-ks,5,3)+“秒”
set safety on
表3為五次實驗結(jié)果,在該表中發(fā)現(xiàn)當(dāng)開啟RushMore技術(shù)時耗時量平均值為0.002秒,而關(guān)閉RushMore技術(shù)時耗時量平均值也為0.002秒。若再次把索引刪除,會得到和表2差不多的實驗結(jié)果。因此在簡單的SQL語句中,是否開啟RushMore對查詢的速度也沒有多大影響。
2 RushMore技術(shù)的特點
從上面的幾個試驗中我們發(fā)現(xiàn)在VFP的非SQL命令中,RushMore技術(shù)對命令的優(yōu)化是基于VFP中索引的,它能根據(jù)條件表達(dá)式自動選擇索引,以提高數(shù)據(jù)查詢的速度,彌補VFP不能自動選擇索引的缺陷。
2.1 RushMore優(yōu)化原理
RushMore技術(shù)是一種數(shù)據(jù)存取技術(shù),它允許成組的記錄很有效的被存取,在速度上可與經(jīng)過索引的單一記錄存取相比較,它使VFP能夠在PC機(jī)上處理含有數(shù)百萬個記錄的真正巨大的表,在速度上能夠和大型機(jī)數(shù)據(jù)庫系統(tǒng)相媲美。
RushMore利用標(biāo)準(zhǔn)的FoxPro B-樹索引,并且不需要任何新類型的文件或者索引。它可以利用VFP的標(biāo)準(zhǔn)索引、壓縮索引,復(fù)合或結(jié)構(gòu)化索引。壓縮索引所產(chǎn)生的索引文件的大小只相當(dāng)于原來索引的六分之一大小。由于壓縮索引文件實際上更小,因而它們能被更快速地單獨處理。這就意味著,處理它們需要更少的磁盤存取,并且更大部分的索引可以保留在VFP內(nèi)存緩沖區(qū)中。雖然在理論上,復(fù)合或結(jié)構(gòu)索引與壓縮索引使用同樣的壓縮技術(shù)與方法,但實際上壓縮索引比復(fù)合或結(jié)構(gòu)索引操作還是稍快一些。所以,隨著數(shù)據(jù)庫的增大,使用壓縮索引可獲得較快的速度。RushMore不僅僅充分受益于空間更小的壓縮式索引,對原來的索引格式也同樣有效。當(dāng)程序執(zhí)行了一條應(yīng)用RushMore的命令時,它會立即與匹配的記錄組合在一起,再由該命令去操作這一組記錄,顯然,它是將大型數(shù)據(jù)庫變成了一個小數(shù)據(jù)庫,對小數(shù)據(jù)庫的操作當(dāng)然就會更快。
2.2 RushMore優(yōu)化原則
RushMore并不是對所有非SQL命令都能提高查詢效率。在NEXT、RECORD、ALL、REST四個范圍子句中,它只對ALL和REST有優(yōu)化效果;對于條件語句FOR和WHILE,它只對FOR語句優(yōu)化;在使用NOT條件創(chuàng)建索引時不能優(yōu)化;在使用了惟一索引(UNIQUE)時不能優(yōu)化;在內(nèi)存很小的計算機(jī)上處理數(shù)據(jù)量很大的表時,RushMore可能會找不到足夠的內(nèi)存,也是不能優(yōu)化的。
2.3 組合表達(dá)式的RushMore優(yōu)化原則
在簡單的語句中,VFP能根據(jù)優(yōu)化原則自動選擇關(guān)閉還是開啟RushMore。但是,實際案例中我們常常需要在FOR語句中使用AND、OR或NOT這三個邏輯操作符組成邏輯表達(dá)式來提高數(shù)據(jù)的檢索。那么在各種可優(yōu)化或不可優(yōu)化有表達(dá)式組合中,整個優(yōu)化結(jié)果是什么呢?表4給出了組合表達(dá)式的各種優(yōu)化結(jié)果。
從表4中可以看出在很多情況下,組合表達(dá)式的結(jié)果是不能被優(yōu)化的。當(dāng)這些組合表達(dá)式再次組合成更加復(fù)雜的表達(dá)式時這些全部可優(yōu)化、部分可優(yōu)化或不可優(yōu)化的組合表達(dá)式會有一個什么樣的優(yōu)化結(jié)果呢?表5列出了這些優(yōu)化種類的結(jié)果。
2.4 RushMore技術(shù)的優(yōu)化方法
從優(yōu)化規(guī)則表中我們可以看出不同的表達(dá)式組合中優(yōu)化情況都不盡相同,在VFP中只要潛在可優(yōu)化的命令中的FOR子句表達(dá)式不能被RushMore優(yōu)化,RushMore就被自動禁止。但在少數(shù)情況下,VFP自動選擇的RushMore卻不能夠加快數(shù)據(jù)查詢。譬如說,如果程序中的潛在可優(yōu)化的命令修改了FOR子句中的索引關(guān)鍵字,RushMore的記錄集就已經(jīng)過時了,這時,就應(yīng)當(dāng)禁止RushMore以保證獲得表的最新的信息。
所以在特定時刻,我們可以用Set Optimize Off命令或NOOPTIMIZE子句對當(dāng)前命令關(guān)閉RushMore功能,使程序運行效率達(dá)到一個最優(yōu)化的效果。
3 結(jié)束語
綜上所述,雖然VFP能夠自動開啟或關(guān)閉RushMore技術(shù)來提高查詢速度,但并不是每次都能得到一個最優(yōu)化的結(jié)果,我們應(yīng)該從實踐全局性來考慮整個程序的執(zhí)行過程,在不同地方人為地開啟或關(guān)閉RushMore去獲得一個最佳的優(yōu)化結(jié)果。
參考文獻(xiàn)
[1]薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社,1997.
[2]王利.全國計算機(jī)等級考試二級教程――VFP程序設(shè)計[M].北京:高等教育出版社,2005.
[3]張洪舉.Visual FoxPro程序設(shè)計參考手冊[M].北京:人民郵電出版社,2004.
相關(guān)熱詞搜索:淺談 技術(shù) VFP 淺談VFP中的RUSHMORE技術(shù) 淺析vfp中的數(shù)據(jù)緩沖技術(shù) 技術(shù)實時熱點
熱點文章閱讀