摘要
這篇文章介紹了在設計、編寫和實現microsoft access
資料庫應用
程式時為保證擁有最高速度而需要注意的幾點。
介紹 作為一名
資料庫程式
員,你的主要任務是讓你的使用者能快速地選擇、
管理和訪問他們所需要的資訊。其他的工作幾乎都是一成不變的,只要你的
資料庫應用
程式執行速度越快,你的
程式效率越高。這篇文章的目的就是突出各種不同的
技巧和策略,通過優化
程式來提高速度,讓你的microsoft access
資料庫應用
程式的效率更高,這樣也可以幫助你完成作為一名
資料庫開發
者的主要使命。
瞄準速度問題的根本
為了提高你的
資料庫程式
的速度,自然而然地你會想到去注意影響速度最基本的幾個部分,我們將從處理這幾個部分著手。在你力圖提高你的
資料庫程式
效能的時候,你的
程式所執行的硬體平台將是唯一的決定因素。顯而易見,實現優化的第一條原則應該是較快的硬體=較快的
資料庫,當然cpu和ram是這個等式的核心所在。相信你一定注意到microsoft access 所宣告的,要達到乙個令人滿意的效能,至少需要8mb的ram和乙個80486的cpu。一般情況下,使用者注意到這一點是理所應當的,但我卻見過許多使用者為他們的microsoft access 的執行速度而感到沮喪,當我問及他們使用什麼機器執行此
程式時,他們告訴我是一台80386,並且是在執行一台伺服器上的乙個msaccess.exe。所以,在相信你的使用者通過下面的方法固然能提高其
程式效能的同時,始終需要強調的仍然是,在microsoft access 執行過程中,硬體才是關鍵的問題。
有效的磁碟訪問
假定已經有了乙個令人滿意的硬體配置,下面讓我們討論一下如何才能提高microsoft access 在此平台上的執行速度。就這個問題,對你的
資料庫程式
而言,影響其效能的第二位因素就是磁碟訪問了。在執行過程中,對物理磁碟的訪問總是乙個速度的瓶頸(與訪問儲存在 ram中的資料相比較而言),所以,你應該儘量減少對磁碟的訪問。然而,由於你的應用
程式總是要和一些磁碟或其他一些物理裝置打交道,所以,你的目標應該是保證所有的磁碟訪問都盡可能有效。要實現這一點,方法是經常整理你的磁碟資料碎片,整理你的
資料庫所在的磁碟驅動器以及所有你執行你的
資料庫程式
時要涉及的磁碟驅動器,而且你還應提醒你的使用者定期清理磁碟碎片,以此保證磁碟訪問一直有效。這將最大程度地減少在對物理磁碟進行讀寫而花費的時間,儘管這些讀寫是不可避免的,同時優化了整個體系的效能。
使ram最大化/對磁碟訪問的頻率最小化
下乙個主題是使你的
資料庫程式
與物理磁碟驅動器打交道的頻率最小。要做到這一點關鍵是盡可能多的釋放ram空間給你的應用
程式使用。要實現這一點,你需要做到以下幾點:
增加最大緩衝區的尺寸
首先涉及到你對最大緩衝區尺寸的設定。最大緩衝區的尺寸指的是microsoft access作為內部儲存空間而保留的ram的數目。儲存空間越大,使用者需求的資料能在ram中找到可能性越大,同時減少了對物理磁碟的訪問頻率。microsoft access 需要的最小緩衝區是512kb,如果你的硬體
系統有多於4mb的ram,那麼你就可以為microsoft access 多分配一些供其使用(這樣也增加了
系統的效能)。要做到這一點,只需要在msaccess.ini(在你的windows目錄下)檔案中增加對最大緩衝區的設定,使用你的文字編輯器,例如記事本,在此檔案中找到 [option] 段,在其中加這樣一句話:maxbuffersize = ***xx
這其中的***xx即是為你的應用
程式對儲存空間分配而作的新設定(例如,設定maxbuffersize=2048將為microsoft access分配2mb的緩衝區空間)。那麼,你究竟應該分配多少才算合適呢?除了「盡可能多」,其他的還真難說。你需要手動地調節這個設定,同時需要試著讓你的硬體都能提供以下條件:1)不能妨礙使用者同時正在執行的
程式,2)不會影響其自身底層操作
系統的執行效率(你可能會在
程式啟動時想通過.ini檔案檢視一下microsoft access自身的配置,因此,任何對msaccess.ini檔案的修改都將只能在下一次microsoft access啟動時才能奏效,而對現在正在執行的microsoft access
程式沒有任何的影響)。
避免裝載wizards
為了釋放更多的
記憶體以供microsoft access使用,另乙個你可以採取的步驟是:如果你不使用wizards,那麼就不要裝載它。你可以開啟msaccess.ini檔案,找到[libraries]部分,在「wizards.mdb=ro」這一句之前加乙個分號,這樣就避免了自動載入wizards。這樣做將能夠釋放315b的ram提供給microsoft access以作己用,這樣做的好處不僅在於提高了執行時間的效能,同時使每個應用
程式平均減少了大約10秒的安裝時間。
解除牆紙/背景位圖
解除標準windows牆紙背景可以釋放ram中任何一處25k到350k的空間。解除複雜的點陣圖將釋放更多的
記憶體空間。
建立永久交換檔案
建立乙個永久交換檔案(相對於臨時檔案而言)將增加你額外的效能。關於這一點,你可以求助於關於這方面的幫助文件,它將指導你在執行
資料庫應用
程式的機器上建立這一檔案。
到現在為止,我們已經解決了有關硬體平台、最大的磁碟訪問效率的問題,並且為你的應用
程式增加了有效的ram儲存空間,接下來讓我們轉向優化應用
程式本身。 壓縮、
壓縮要保證經常性的
壓縮你的
程式**
。當你在
開發和使用microsoft access
資料庫時,你要經常性地增加和刪除資料、
**等等。現在的問題是microsoft access並不能有效地釋放已分配的但被刪除的物件空間,這將意味著即使你刪除了乙個物件,而這個物件仍然在你的
資料庫中佔據空間。
壓縮資料庫
將迫使microsoft access真正刪除這些物件並**其佔據的空間,從而使得你的
資料庫盡量小但卻更有效。我曾把逐字逐句查詢的平均時間減少了30%——50%,而做到這一點僅僅是通過去
壓縮那些由於經常使用又缺乏
壓縮而變得過度膨脹的
資料庫程式
,因此,在執行
程式的過程中,不要忽視
壓縮過程的重要性。正如你要定期清除
硬碟資料碎片一樣,你和你的使用者也應當定期
壓縮資料庫
來保證它始終最有效地執行。
只用**
你可能希望通過巨集操作來搭建乙個應用
程式的模型,一旦你開始優化你的
程式的最終效能,一定要把所有的巨集重新寫成
**。這主要是因為microsoft access
**要比巨集執行得快的多。但遺憾的是有三個巨集操作你不能將他們改寫成
**,這三個巨集是autokeys、autoexec和addmenu操作,這三個巨集在microsoft access中沒有相應的等價類,因此你只能被迫使用他們。不過,你可以克服autoexec的限制,只需要定義autoexec為呼叫你的access basic autoexec函式。
優化資料型別宣告
當你在你的
**中宣告資料型別時,你應該試著盡可能精確。因為若是乙個變數的型別(如果沒有特別宣告,預設為可變型別)非常靈活自由的話,那麼這種型別同時也將是最浪費
記憶體的一種型別。這樣一來,如果你知道check balance這個變數不需要超過4位小數精度的話,那麼就把它定義成確定型別而不是可變型別。對你的過程函式的定義同樣也可以如此操作(比如說,把函式postcredit()宣告為整形,而不是function postcredit())。請注意這樣乙個事實,如果你估計乙個變數將會被處理成乙個空值,那麼你需要去把它定義成乙個可變型別而不是乙個確定的嚴格的資料型別,否則你會得到乙個錯誤資訊。同樣地,要注意整形除法和浮點除法之間的差別。
經常使用from/report變數
在你的程式
中,你需要保證你能提前解決盡可能多的查詢工作。這意味著什麼呢?舉個例子來說明:如果你想在
**中查閱乙個名為[netprice]的
文字框,你可以使用這樣一條語句:
mytemprariable=forms![customer invoice]![net price]
對於這條指令,microsoft access首先在forms物件裡搜尋名為[customer invoice]的表,一旦它找到這張表,microsoft access接下來尋找名為[netprice]的控制,並進行正確的操作。從這個例子可以看出,microsoft access經過兩次查詢最終確定我們指定的控制。如果你想在同一
程式(函式或者子函式)中再次查詢[customer invoice]表中任一控制,你可以刪除可能會在下次出現的多餘語句,而只使用如下語句:
dim f as form
set f = forms![customer invoice]
現在,你的form變數將自動指向form[customer invoice],允許microsoft access 避免每次在你需要查詢[customer invoice]表中任一物件時,都要把
資料庫的form物件中全部搜。
如何優化LINUX
用setup system service,把裡面不用的服務前面的 去掉。chkconfig裡面看看開了哪些服務埠,也可以off掉,最後用nmap看看還有哪些埠開放著,不用的可以把 etc services裡面相應的埠注釋掉。先介紹兩個系統管理的概念 1 系統效能管理 1 響應時間 response...
如何優化Nginx
1.worker processes的程序數,數量要與cpu數量一致,通過lscpu檢視 worker processes 1 2.worker process開啟檔案數的優化 worker rlimit nofile 65535 2.1 優化了nginx的worker程序最多開啟數量的引數之後,還...
如何優化Kmeans
想要知道如何優化kmeans,首先得知道 什麼是kmeans?kmeans的優點 kmeans的缺陷 知道了以上這些知識點,我們才能針對性優化kmeans。kmeans是一種非監督的聚類演算法,首先選取k值,並隨機初始化k個質心,計算每個樣本與質心的相似度,將樣本劃分到距離其最近的乙個質心的堆簇,然...