2019/3/26 12:38:44
asp編程中優化數據庫
與沒有(yǒu)數據庫的(de)網站相(xiàng)比,數據庫的(de)存取會(huì)降低你(nǐ)的(de)系統性能(néng)。但(dàn)是大(dà)多數情況下,網站和(hé)數據庫有(yǒu)密不可(kě)分(fēn)的(de)關系,正是數據庫給站點提供了大(dà)容量、多樣性、個(gè)性化等特色,并實現了很多特殊的(de)功能(néng)。
1.不要忘記給數據庫做索引。合理(lǐ)的(de)索引能(néng)立即顯著地(dì)提高(gāo)數據庫整個(gè)系統的(de)性能(néng)。可(kě)以參考有(yǒu)關SQL性能(néng)調試書(shū)籍,學會(huì)根據所需查詢方式合理(lǐ)制(zhì)作索引和(hé)根據索引方式改進查詢語句。
2.在适當的(de)情況下,盡可(kě)能(néng)的(de)用(yòng)存儲過程而不是SQL查詢,因爲前者已經過了預編譯,運行(xíng)速度更快。同時讓數據庫僅僅返回你(nǐ)所需要的(de)那些數據,而不是返回大(dà)量數據再讓ASP程序過濾。總之要充分(fēn)和(hé)有(yǒu)效地(dì)發揮數據庫的(de)強大(dà)功能(néng),讓它按照(zhào)我們的(de)要求反饋給我們最合适和(hé)最精練的(de)信息。
3.在可(kě)能(néng)情況下我們應該使用(yòng)SQL Server而不是Access。因爲Access僅僅是基于文(wén)件(jiàn)的(de)數據庫,多用(yòng)戶性能(néng)很差。數據庫連接盡量使用(yòng)OLEDB和(hé)非DSN方式,因爲這種連接方式有(yǒu)更好的(de)并發性能(néng)。
4.避免使用(yòng)DAO(Data Access Objects)和(hé)RDO(Remote Data Objects)數據源,因爲他(tā)們主要應用(yòng)在單用(yòng)戶的(de)處理(lǐ)系統裏,ADO(ActiveX Data Objects)才是爲Web應用(yòng)設計(jì)的(de)。
5.建立記錄集Rescordset的(de)時候要清晰合理(lǐ)地(dì)設置數據遊标(cursort)和(hé)鎖定方式(locktype)。因爲在不同的(de)方式下ASP會(huì)以不同的(de)方式操縱數據庫,其執行(xíng)速度也(yě)有(yǒu)很大(dà)區别,尤其在大(dà)數據量的(de)時候。如(rú)果你(nǐ)隻想遍曆數據,那麽默認遊标(前進、隻讀(dú))會(huì)帶來最好的(de)性能(néng)。
6.當你(nǐ)引用(yòng)ADO變量的(de)時候,會(huì)消耗較多的(de)CPU周期。因此,如(rú)果在一個(gè)ASP頁面中多次引用(yòng)數據庫的(de)字段變量,一個(gè)較好的(de)方式是将字段值先放(fàng)入本地(dì)變量,然後可(kě)以直接調用(yòng)本地(dì)變量來計(jì)算和(hé)顯示數據。
7.緩存ADO Connection對象也(yě)許不是一個(gè)好主意。如(rú)果一個(gè)連接(Connection)對象被存儲在Application對象中而被所有(yǒu)ASP頁面使用(yòng),那麽所有(yǒu)頁面就會(huì)争著(zhe)使用(yòng)這個(gè)連接。但(dàn)是如(rú)果連接對象被存儲在Session對象中,就要爲每個(gè)用(yòng)戶創建一個(gè)數據庫連接,這就減小(xiǎo)了連接池的(de)作用(yòng),并且增大(dà)了Web服務器(qì)和(hé)數據庫服務器(qì)的(de)壓力。可(kě)以用(yòng)在每個(gè)使用(yòng)ADO的(de)ASP頁創建和(hé)釋放(fàng)ADO對象來替代緩存數據庫連接。因爲IIS内建了數據庫連接池,所以這種方法非常有(yǒu)效,缺點是每個(gè)ASP頁面都(dōu)需要進行(xíng)一些創建和(hé)釋放(fàng)操作。
8.ASP最強大(dà)和(hé)主要的(de)用(yòng)途之一就是對數據庫進行(xíng)操作,在數據庫操作中我們要注意:不要任意使用(yòng)“SELECT * ......” 形式的(de)SQL查詢語句。應該盡量檢索你(nǐ)所需要的(de)那些字段。比如(rú)一個(gè)表中有(yǒu)10個(gè)字段,但(dàn)是你(nǐ)隻會(huì)用(yòng)到(dào)其中的(de)一個(gè)字段(name),就該使用(yòng)“select name from mytable”,而不是用(yòng)“select * from mytable”。在字段數比較少(shǎo)的(de)時候,兩者的(de)區别可(kě)能(néng)并不明(míng)顯,但(dàn)是當一個(gè)表中擁有(yǒu)幾十個(gè)字段的(de)時候,數據庫會(huì)多檢索很多你(nǐ)并不需要的(de)數據。在這種情況下你(nǐ)最好不要爲了節省打字時間或者害怕查找對應字段名稱的(de)麻煩,而要老老實實地(dì)使用(yòng)“select id,name,age... from mytable”。
9.及時關閉打開(kāi)的(de)記錄集對象以及連接(Connection)對象。記錄集對象和(hé)連接對象耗費系統資源相(xiàng)當大(dà),因此它們的(de)可(kě)用(yòng)數量是有(yǒu)限的(de)。如(rú)果你(nǐ)打開(kāi)了太多的(de)記錄集對象以及連接對象而最後卻沒有(yǒu)關閉它們,可(kě)能(néng)會(huì)出現ASP程序剛開(kāi)始的(de)時候運行(xíng)速度很快,而多運行(xíng)幾遍就越來越慢(màn)的(de)現象,甚至導緻服務器(qì)死機。請使用(yòng)如(rú)下方法進行(xíng)關閉:
MyRecordSet.closeSet MyRecordSet=Nothing
Set MyConnection=Nothing
10.連接數據庫
仍然使用(yòng)ODBC系統或者文(wén)件(jiàn)DSN來連接數據庫,或者使用(yòng)很快的(de)OLEDB技術(shù)來連接。使用(yòng)後者,當移動Web文(wén)件(jiàn)時,不再需要修改配置。
OLEDB位于應用(yòng)程序與ODBC層之間。在ASP頁面中,ADO就是位于OLEDB之上(shàng)的(de)程序。調用(yòng)ADO時,首先發送給OLEDB,然後再發送給ODBC層。可(kě)以直接連接到(dào)OLEDB層,這麽做後,将提高(gāo)服務器(qì)端的(de)性能(néng)。怎麽直接連接到(dào)OLEDB呢?
如(rú)果使用(yòng)SQLServer 2000,使用(yòng)下面的(de)代碼做爲連接字符串:
strConnString = "DSN='';DRIVER={SQL SERVER};" & _
"UID=myuid;PWD=mypwd;" & _
"DATABASE=MyDb;SERVER=MyServer;"
最重要的(de)參數就是“DRIVER=”部分(fēn)。如(rú)果你(nǐ)想繞過ODBC而使用(yòng)OLEDB來訪問SQL Server,使用(yòng)下面的(de)語法:
strConnString ="Provider=SQLOLEDB.1;Password=mypassword;" & _
"Persist Security Info=True;User ID=myuid;" & _
"Initial Catalog=mydbname;" & _
"Data Source=myserver;Connect Timeout=15"
深圳市南山區南山街(jiē)道南海(hǎi)大(dà)道西(xī)桂廟路(lù)北陽光(guāng)華藝大(dà)廈1棟4F、4G-04
咨詢電話(huà):136 8237 6272
大(dà)客戶咨詢:139 0290 5075
業(yè)務QQ:195006118
技術(shù)QQ:179981967