改善基于SQL Server數(shù)據(jù)庫程序的可伸縮性的方案
以下的文章主要向大家講述的是正確改善基于SQL Server數(shù)據(jù)庫的實際應(yīng)用程序的可伸縮性之從 INSERT 返回 IDENTITY的內(nèi)容介紹,在實際操作中有時,為了讓應(yīng)用程序運行得更快,所做的全部工作就是在這里或那里做一些很小調(diào)整。
但關(guān)鍵在于確定如何進行調(diào)整!遲早您會遇到這種情況:應(yīng)用程序中的 SQL 查詢不能按照您想要的方式進行響應(yīng)。它要么不返回數(shù)據(jù),要么耗費的時間長得出奇。如果它降低了企業(yè)應(yīng)用程序的速度,用戶必須等待很長時間。用戶希望應(yīng)用程序響應(yīng)迅速,他們的報告能夠在瞬間之內(nèi)返回分析數(shù)據(jù)。就我自己而言,如果在Web上沖浪時某個頁面要耗費十多秒才能加載,我也會很不耐煩。
為了解決這些問題,重要的是找到問題的根源。那么,從哪里開始呢?根本原因通常在于數(shù)據(jù)庫設(shè)計和訪問它的查詢。我將講述幾項技術(shù),這些技術(shù)可用于提高基于SQL Server的應(yīng)用程序的性能或改善其可伸縮性。
我將仔細說明 LEFT JOIN、CROSS JOIN 的使用以及IDENTITY 值的檢索。請記住,根本沒有神奇的解決方案。調(diào)整您的數(shù)據(jù)庫及其查詢需要占用時間、進行分析,還需要大量的測試。這些技術(shù)都已被證明行之有效,但對您的應(yīng)用程序而言,可能其中一些技術(shù)比另一些技術(shù)更適用。
從 INSERT 返回 IDENTITY
我決定從遇到許多問題的內(nèi)容入手:如何在執(zhí)行SQL INSERT后檢索IDENTITY值。通常,問題不在于如何編寫檢索值的查詢,而在于在哪里以及何時進行檢索。在SQL Server數(shù)據(jù)庫中,下面的語句可用于檢索由***在活動數(shù)據(jù)庫連接上運行的 SQL 語句所創(chuàng)建的 IDENTITY 值:
- SELECT @@IDENTITY
這個 SQL 語句并不復(fù)雜,但需要記住的一點是:如果這個***的 SQL 語句不是 INSERT,或者您針對非 INSERT SQL 的其他連接運行了此 SQL,則不會獲得期望的值。您必須運行下列代碼才能檢索緊跟在 INSERT SQL 之后且位于同一連接上的 IDENTITY,如下所示:
- INSERT INTO Products (ProductName) VALUES ('Chalk')
- SELECT @@IDENTITY
在一個連接上針對 Northwind 數(shù)據(jù)庫運行這些查詢將返回一個名稱為 Chalk 的新產(chǎn)品的 IDENTITY 值。所以,在使用ADOVisual Basic應(yīng)用程序中,可以運行以下語句:
Set oRs = oCn.Execute("SET NOCOUNT>此代碼告訴 SQL Server 不要返回查詢的行計數(shù),然后執(zhí)行 INSERT 語句,并返回剛剛為這個新行創(chuàng)建的 IDENTITY 值。SET NOCOUNT>
此方法雖然有效,但需要在 SQL 語句中額外添加一些代碼。獲得相同結(jié)果的另一方法是在 INSERT 之前使用 SET NOCOUNT> CREATE TRIGGER trProducts_Insert>觸發(fā)器只在 Products 表上發(fā)生 INSERT 時啟動,所以它總是會在成功 INSERT 之后返回一個 IDENTITY。使用此技術(shù),您可以始終以相同的方式在應(yīng)用程序中檢索 IDENTITY 值。
以上的相關(guān)內(nèi)容就是對改善基于SQL Server數(shù)據(jù)庫的應(yīng)用程序可伸縮性之從 INSERT 返回 IDENTITY的介紹,望你能有所收獲。
【編輯推薦】
- SQL Server 2000的分頁存儲過程的改寫
- SQL Server業(yè)務(wù)規(guī)則的鏈接技術(shù)之探討
- SQL Server子查詢的作用是什么?
- 正確識別SQL Server 版本號的操作方案
- SQL Server分布式分區(qū)視圖簡介