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),
mSales MONEY)
DECLARE @dtStartDate DATETIME,
上一篇 Access數據庫技術(01)