自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server性能進(jìn)行提高的4項(xiàng)技術(shù)概述

數(shù)據(jù)庫(kù) SQL Server
我們今天主要向大家分享的是正確利用以下的4項(xiàng)技術(shù)來(lái)對(duì)SQL Server性能進(jìn)行提高的實(shí)際操作步驟,以下就是文章的主要內(nèi)容描述。

此文章主要向大家講述的是如何正確利用以下的4項(xiàng)技術(shù)來(lái)對(duì)SQL Server性能進(jìn)行提高,主要是包括LEFT JOIN、CROSS 、JOIN以及IDENTITY值的檢索,這些技術(shù)來(lái)提高基于SQL Server性能或改善其可伸縮性。

 

有時(shí),為了讓應(yīng)用程序運(yùn)行得更快,所做的全部工作就是在這里或那里做一些很小調(diào)整。但

 

本文講解如何使用LEFT JOIN、CROSS JOIN以及IDENTITY值的檢索,這些技術(shù)來(lái)提高基于SQL Server的應(yīng)用程序的性能或改善其可伸縮性。

 

有時(shí),為了讓應(yīng)用程序運(yùn)行得更快,所做的全部工作就是在這里或那里做一些很小調(diào)整。但關(guān)鍵在于確定如何進(jìn)行調(diào)整!遲早您會(huì)遇到這種情況:應(yīng)用程序中的SQL 查詢不能按照您想要的方式進(jìn)行響應(yīng)。它要么不返回?cái)?shù)據(jù),要么耗費(fèi)的時(shí)間長(zhǎng)得出奇。

如果它降低了企業(yè)應(yīng)用程序的速度,用戶必須等待很長(zhǎng)時(shí)間。用戶希望應(yīng)用程序響應(yīng)迅速,他們的報(bào)告能夠在瞬間之內(nèi)返回分析數(shù)據(jù)。就我自己而言,如果在Web上沖浪時(shí)某個(gè)頁(yè)面要耗費(fèi)十多秒才能加載,我也會(huì)很不耐煩。

 

為了解決這些問(wèn)題,重要的是找到問(wèn)題的根源。那么,從哪里開(kāi)始呢?根本原因通常在于數(shù)據(jù)庫(kù)設(shè)計(jì)和訪問(wèn)它的查詢。我將講述四項(xiàng)技術(shù),這些技術(shù)可用于提高基于SQL Server的應(yīng)用程序的SQL Server性能或改善其可伸縮性。

我將仔細(xì)說(shuō)明 LEFT JOIN、CROSS JOIN 的使用以及IDENTITY 值的檢索。請(qǐng)記住,根本沒(méi)有神奇的解決方案。調(diào)整您的數(shù)據(jù)庫(kù)及其查詢需要占用時(shí)間、進(jìn)行分析,還需要大量的測(cè)試。這些技術(shù)都已被證明行之有效,但對(duì)您的應(yīng)用程序而言,可能其中一些技術(shù)比另一些技術(shù)更適用。

 

  1. 從 INSERT 返回 IDENTITY 

我決定從遇到許多問(wèn)題的內(nèi)容入手:如何在執(zhí)行SQL INSERT后檢索IDENTITY值。通常,問(wèn)題不在于如何編寫檢索值的查詢,而在于在哪里以及何時(shí)進(jìn)行檢索。在SQL Server中,下面的語(yǔ)句可用于檢索由最新在活動(dòng)數(shù)據(jù)庫(kù)連接上運(yùn)行的 SQL 語(yǔ)句所創(chuàng)建的 IDENTITY 值:

 

  1. SELECT @@IDENTITY 

這個(gè) SQL 語(yǔ)句并不復(fù)雜,但需要記住的一點(diǎn)是:如果這個(gè)最新的 SQL 語(yǔ)句不是 INSERT,或者您針對(duì)非 INSERT SQL 的其他連接運(yùn)行了此 SQL,則不會(huì)獲得期望的值。您必須運(yùn)行下列代碼才能檢索緊跟在 INSERT SQL 之后且位于同一連接上的 IDENTITY,如下所示:

 

  1. INSERT INTO Products (ProductName) VALUES ('Chalk')  
  2. SELECT @@IDENTITY 

 

 

在一個(gè)連接上針對(duì) Northwind 數(shù)據(jù)庫(kù)運(yùn)行這些查詢將返回一個(gè)名稱為 Chalk 的新產(chǎn)品的 IDENTITY 值。所以,在使用ADOVisual Basic應(yīng)用程序中,可以運(yùn)行以下語(yǔ)句:

 

  1. Set oRs = oCn.Execute("SET NOCOUNT ON;INSERT INTO Products _  
  2. (ProductName) VALUES ('Chalk');SELECT @@IDENTITY")  
  3. lProductID = oRs(0) 

 

 

此代碼告訴 SQL Server性能不要返回查詢的行計(jì)數(shù),然后執(zhí)行 INSERT 語(yǔ)句,并返回剛剛為這個(gè)新行創(chuàng)建的 IDENTITY 值。SET NOCOUNT ON 語(yǔ)句表示返回的記錄集有一行和一列,其中包含了這個(gè)新的 IDENTITY 值。

如果沒(méi)有此語(yǔ)句,則會(huì)首先返回一個(gè)空的記錄集(因?yàn)?INSERT 語(yǔ)句不返回任何數(shù)據(jù)),然后會(huì)返回第二個(gè)記錄集,第二個(gè)記錄集中包含 IDENTITY 值。這可能有些令人困惑,尤其是因?yàn)槟鷱膩?lái)就沒(méi)有希望過(guò) INSERT 會(huì)返回記錄集。之所以會(huì)發(fā)生此情況,是因?yàn)?SQL Server 看到了這個(gè)行計(jì)數(shù)(即一行受到影響)并將其解釋為表示一個(gè)記錄集。

因此,真正的數(shù)據(jù)被推回到了第二個(gè)記錄集。當(dāng)然您可以使用 ADO 中的 NextRecordset 方法獲取此第二個(gè)記錄集,但如果總能夠首先返回該記錄集且只返回該記錄集,則會(huì)更方便,也更有效率。

此方法雖然有效,但需要在 SQL 語(yǔ)句中額外添加一些代碼。獲得相同結(jié)果的另一方法是在 INSERT 之前使用 SET NOCOUNT ON 語(yǔ)句,并將 SELECT @@IDENTITY 語(yǔ)句放在表中的 FOR INSERT 觸發(fā)器中,如下面的代碼片段所示。這樣,任何進(jìn)入該表的 INSERT 語(yǔ)句都將自動(dòng)返回 IDENTITY 值。

 

  1. CREATE TRIGGER trProducts_Insert ON Products FOR INSERT AS  
  2. SELECT @@IDENTITY  
  3. GO 

 

 

觸發(fā)器只在 Products 表上發(fā)生 INSERT 時(shí)啟動(dòng),所以它總是會(huì)在成功 INSERT 之后返回一個(gè) IDENTITY。使用此技術(shù),您可以始終以相同的方式在應(yīng)用程序中檢索 IDENTITY 值。

 

內(nèi)嵌視圖與臨時(shí)表

某些時(shí)候,查詢需要將數(shù)據(jù)與其他一些可能只能通過(guò)執(zhí)行 GROUP BY 然后執(zhí)行標(biāo)準(zhǔn)查詢才能收集的數(shù)據(jù)進(jìn)行聯(lián)接。例如,如果要查詢最新五個(gè)定單的有關(guān)信息,您首先需要知道是哪些定單。這可以使用返回定單 ID 的 SQL 查詢來(lái)檢索。此數(shù)據(jù)就會(huì)存儲(chǔ)在臨時(shí)表(這是一個(gè)常用技術(shù))中,然后與 Products 表進(jìn)行聯(lián)接,以返回這些定單售出的產(chǎn)品數(shù)量:

 

  1. CREATE TABLE #Temp1 (OrderID INT NOT NULL, _  
  2. OrderDate DATETIME NOT NULL)  
  3. INSERT INTO #Temp1 (OrderID, OrderDate)  
  4. SELECT TOP 5 o.OrderID, o.OrderDate  
  5. FROM Orders o ORDER BY o.OrderDate DESC  
  6. SELECT p.ProductName, SUM(od.Quantity) AS ProductQuantity  
  7. FROM #Temp1 t  
  8. INNER JOIN [Order Details] od ON t.OrderID = od.OrderID  
  9. INNER JOIN Products p ON od.ProductID = p.ProductID  
  10. GROUP BY p.ProductName  
  11. ORDER BY p.ProductName  
  12. DROP TABLE #Temp1 

 

 

 

以上的相關(guān)內(nèi)容就是對(duì)四項(xiàng)技術(shù)提高SQL Server性能的介紹,望你能有所收獲。

 

責(zé)任編輯:佚名 來(lái)源: 51CTO網(wǎng)絡(luò)整理
相關(guān)推薦

2011-04-01 15:36:24

索引SQL Server

2010-08-20 11:07:07

設(shè)置 DB2

2013-08-03 17:59:37

Nginx

2010-07-16 13:48:08

SQL Server合

2011-04-02 13:37:05

SQL Server 索引視圖

2010-07-26 09:34:24

SQL Server性

2010-06-17 10:43:21

SQL Server

2009-04-16 17:44:46

性能優(yōu)化擴(kuò)展高性能

2010-07-16 11:30:06

SQL Server

2010-08-12 18:00:56

DB2數(shù)據(jù)庫(kù)

2009-04-16 17:24:54

性能優(yōu)化SQL Server 數(shù)據(jù)收集

2015-11-24 10:31:58

谷歌云計(jì)算網(wǎng)絡(luò)性能

2009-09-15 13:53:53

Linq To Sql

2010-07-06 11:36:16

SQL Server集

2010-07-26 11:27:43

SQL Server打

2010-10-21 10:42:30

SQL Server查

2022-06-29 08:00:00

SQL分層表數(shù)據(jù)

2010-07-19 14:31:14

SQL Server

2010-07-07 10:47:58

SQL Server索

2010-07-07 13:58:25

SQL Server死
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)