程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 五種提高 SQL 性能的方法

五種提高 SQL 性能的方法

編輯:關於SqlServer
本文節選自MSDN的文章《五種提高 SQL 性能的方法》,提出如何提高基於SQL Server應用程序的運行效率,非常值得推薦。對一些Traffic很高的應用系統而言,如何提高和改進SQL指令,是非常重要的,也是一個很好的突破點。
*文章主要包括如下一些內容(如感興趣,請直接訪問下面的URL閱讀完整的中英文文檔):

1, 從 INSERT 返回 IDENTITY 
SELECT @@IDENTITY

2, 內嵌視圖與臨時表 
臨時表 - 在 tempdb 中的臨時表會導致查詢進行大量 I/O 操作和磁盤訪問,臨時表會消耗大量資源。
內嵌視圖 -使用內嵌視圖取代臨時表。內嵌視圖只是一個可以聯接到 FROM 子句中的查詢。如果只需要將數據聯接到其他查詢,則可以試試使用內嵌視圖,以節省資源。

3, 避免 LEFT JOIN 和 NULL 
LEFT JOIN 消耗的資源非常之多,因為它們包含與 NULL(不存在)數據匹配的數據。在某些情況下,這是不可避免的,但是代價可能非常高。LEFT JOIN 比 INNER JOIN 消耗資源更多,所以如果您可以重新編寫查詢以使得該查詢不使用任何 LEFT JOIN,則會得到非常可觀的回報。

加快使用 LEFT JOIN 的查詢速度的一項技術涉及創建一個 TABLE 數據類型,插入第一個表(LEFT JOIN 左側的表)中的所有行,然後使用第二個表中的值更新 TABLE 數據類型。此技術是一個兩步的過程,但與標准的 LEFT JOIN 相比,可以節省大量時間。一個很好的規則是嘗試各種不同的技術並記錄每種技術所需的時間,直到獲得用於您的應用程序的執行性能最佳的查詢。
DECLARE @tblMonths TABLE (sMonth VARCHAR(7))

4, 靈活使用笛卡爾乘積 
對於此技巧,我將進行非常詳細的介紹,並提倡在某些情況下使用笛卡爾乘積。出於某些原因,笛卡爾乘積 (CROSS JOIN) 遭到了很多譴責,開發人員通常會被警告根本就不要使用它們。在許多情況下,它們消耗的資源太多,從而無法高效使用。但是像 SQL 中的任何工具一樣,如果正確使用,它們也會很有價值。

其中一段示例代碼,值得效仿:
-- 笛卡爾乘積則可以返回所有月份的所有客戶。笛卡爾乘積基本上是將第一個表與第二個表相乘,生成一個行集合,其中包含第一個表中的行數與第二個表中的行數相乘的結果。因此,笛卡爾乘積會向表 @tblFinal 返回 12(所有月份)*81(所有客戶)=972 行。最後的步驟是使用此日期范圍內每個客戶的月銷售額總計更新 @tblFinal 表,以及選擇最終的行集。

DECLARE @tblMonths TABLE (sMonth VARCHAR(7))
DECLARE @tblCustomers TABLE (    CustomerID CHAR(10),
            CompanyName VARCHAR(50),
            ContactName VARCHAR(50))
DECLARE @tblFinal TABLE (    sMonth VARCHAR(7),
            CustomerID CHAR(10),
            CompanyName VARCHAR(50),
            ContactName VARCHAR(50),
        &nbs
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved