2010-07-25 76 views
1

下面的CUST表格將加入〜10個表格。SQL - 在此處執行子查詢還是擴展WHERE子句會更好嗎?

對於這個子查詢,我最好直接加入Customer表並將子查詢的4部分WHERE子句移動到主查詢的WHERE子句中?

我主要想知道,如果我們通過創建子查詢如下本地化部分主WHERE子句,是否可以減少SQL Server必須執行的處理量。

select * From 
(select CKey, CID, CName from MainDB.dbo.Customer 
    where 
     LOC = 'ARK' 
     and Status = 1 
     and CID not like 'KAN%' 
     and CID not like 'MIS%') as CUST 
+2

SQL Server中的查詢優化器對於像這樣的事情其實很聰明,所以我相信你不會看到任何好處,把這樣的約束放到一個單獨的子查詢中 - 只需將你的Customer表連接到其他表並將它們將四個WHERE子句放入所有其他WHERE子句的列表中 - 沒有造成任何損害。 – 2010-07-25 19:03:01

回答

3

根據您提供的內容,不需要子查詢。如果沒有〜10個連接到派生表CUST,那麼說出什麼應該或不應該做什麼是非常困難的。

5

在舊版本中,是的,我已經看到使用派生表(而不是子查詢)的巨大改進,而不是在一個JOIN/WHERE中。現在它不太相關,因爲SQL Server 2005

但是,爲什麼不試試並查看會發生什麼?

+0

關於你的問題,我想知道爲什麼一種方式或另一種更好的基本理論。軼事證據不會給我太多信心,每次部署此類查詢時我都會做相同的測試......而且還有很多。謝謝你的回答...如果你有參考鋪設我會很感興趣 – 2010-07-25 22:07:44

0

我建議如果你加入那麼多表格,最好是建立一個視圖。

+0

爲什麼建立一個視圖推薦?我必須建立許多像這樣的複雜查詢...我有很多視圖 – 2010-07-25 20:23:21

+0

視圖是一個宏,展開=相同的查詢無論如何... – gbn 2010-07-25 20:56:23

+2

@ hamlin11構建視圖適用於多表連接通常一遍又一遍地重複使用。這可以讓你有一個模塊化的結構,這可以使事情更容易維護。通過數據庫查看每個查詢的意見並不是一個好主意。明智地使用視圖和內聯表值函數可以爲數據庫帶來良好的組織。 – 2010-07-25 21:08:01