動態網頁編程中最佳化資料庫注意的十大原則

來源:互聯網
上載者:User

與沒有資料庫的網站相比,資料庫的存取會降低你的系統效能。但是大多數情況下,網站和資料庫有密不可分的關係,正是資料庫給網站提供了大容量、多樣性、個人化等特色,並實現了很多特殊的功能。

1不要忘記給資料庫做索引。合理的索引能立即顯著地提高資料庫整個系統的效能。可以參考有關SQL效能調試書 籍,學會根據所需查詢方式合理製作索引和根據索引方式改進查詢語句。

2在適當的情況下,儘可能的用預存程序而不是SQL查詢,因為前者已經過了先行編譯,運行速度更快。同時讓資料庫僅僅返回你所需要的那些資料,而不是返回大量資料再讓ASP程式過濾。總之要充分和有效地發揮資料庫的強大功能,讓它按照我們的要求反饋給我們最合適和最精練的資訊。

3在可能情況下我們應該使用SQL Server而不是Access。因為Access僅僅是基於檔案的資料庫,多使用者效能很差。資料庫連接盡量使用OLEDB和非DSN方式,因為這種串連方式有更好的並發效能。

4避免使用DAO(Data Access Objects)和RDO(Remote Data Objects)資料來源,因為他們主要應用在單使用者的處理系統裡,ADO(ActiveX Data Objects)才是為Web應用設計的。

5建立記錄集Rescordset的時候要清晰合理地設定資料遊標(cursort)和鎖定方式(locktype)。因為在不同的方式下 ASP會以不同的方式操縱資料庫,其執行速度也有很大區別,尤其在大資料量的時候。如果你只想遍曆資料,那麼預設遊標(前進、唯讀)會帶來最好的效能。

6當你引用ADO變數的時候,會消耗較多的CPU周期。因此,如果在一個ASP頁面中多次引用資料庫的欄位變數,一個較好的方式是將欄位值先放入本地變數,然後可以直接調用本地變數來計算和顯示資料。

7緩衝ADO Connection對象也許不是一個好主意。如果一個串連(Connection)對象被儲存在Application對象中而被所有ASP頁面使用,那麼所有頁面就會爭著使用這個串連。但是如果連線物件被儲存在Session對象中,就要為每個使用者建立一個資料庫連接,這就減小了串連池的作用,並且增大了Web伺服器和資料庫伺服器的壓力。可以用在每個使用ADO的ASP頁建立和釋放ADO對象來替代快取資料庫串連。因為IIS內建了資料庫連接池,所以這種方法非常有效,缺點是每個ASP頁面都需要進行一些建立和釋放操作。

8ASP最強大和主要的用途之一就是對資料庫進行操作,在資料庫操作中我們要注意:不要任意使用“SELECT * ......” 形式的SQL查詢語句。應該盡量檢索你所需要的那些欄位。比如一個表中有10個欄位,但是你只會用到其中的一個欄位(name),就該使用“select name from mytable”,而不是用“select * from mytable”。在欄位數比較少的時候,兩者的區別可能並不明顯,但是當一個表中擁有幾十個欄位的時候,資料庫會多檢索很多你並不需要的資料。在這種情況下你最好不要為了節省打字時間或者害怕尋找對應欄位名稱的麻煩,而要老老實實地使用“select id,name,age... from mytable”。

9及時關閉開啟的記錄集對象以及串連(Connection)對象。記錄集對象和連線物件耗費系統資源相當大,因此它們的可用數量是有限的。如果你開啟了太多的記錄集對象以及連線物件而最後卻沒有關閉它們,可能會出現ASP程式剛開始的時候運行速度很快,而多運行幾遍就越來越慢的現象,甚至導致伺服器死機。請使用如下方法進行關閉:

MyRecordSet.closeSet MyRecordSet=Nothing
Set MyConnection=Nothing   

10 串連資料庫

仍然使用ODBC系統或者檔案DSN來串連資料庫,或者使用很快的OLEDB技術來串連。使用後者,當移動Web檔案時,不再需要修改配置。

OLEDB位於應用程式與ODBC層之間。在ASP頁面中,ADO就是位於OLEDB之上的程式。調用ADO時,首先發送給OLEDB,然後再發送給ODBC層。可以直接連接到OLEDB層,這麼做後,將提高伺服器端的效能。怎麼直接連接到OLEDB呢?

如果使用SQLServer 7,使用下面的代碼做為連接字串:

strConnString = "DSN='';DRIVER={SQL SERVER};" & _
        "UID=myuid;PWD=mypwd;" & _
        "DATABASE=MyDb;SERVER=MyServer;"

最重要的參數就是“DRIVER=”部分。如果你想繞過ODBC而使用OLEDB來訪問SQL Server,使用下面的文法:

strConnString ="Provider=SQLOLEDB.1;Password=mypassword;" & _
        "Persist Security Info=True;User ID=myuid;" & _
        "Initial Catalog=mydbname;" & _
        "Data Source=myserver;Connect Timeout=15"

為什麼這很重要?

現在你可能奇怪為什麼學習這種新的串連方法很關鍵?為什麼不使用標準的DSN或者系統DSN方法?好,根據Wrox在他們的ADO 2.0程式員參考書籍中所做的測試,如果使用OLEDB串連,要比使用DSN或者DSN-less串連,有以下的效能提高表現:

效能比較:

----------------------------------------------------------------------

SQL                   Access
OLEDB DSN                OLEDB DSN
連線時間: 18 82             連線時間: 62 99
重複1,000個記錄的時間: 2900 5400   重複1,000個記錄的時間: 100 950

----------------------------------------------------------------------

這個結論在Wrox的ADO 2.0程式員參考發表。時間是以毫秒為單位,重複1,000個記錄的時間是以伺服器油標的方式計算的。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.