2016-04-04 46 views
1

我想創建一個分區視圖,但是我的執行計劃顯示它仍在訪問兩個基礎表。我的分區視圖仍在訪問所有底層基表

SQL Fiddle here

爲什麼我的查詢仍在訪問這兩個基礎表然後連接呢?

+0

表中有多少條記錄?順便說一下,分區視圖就像使用過濾器的常規視圖。從視圖中選擇時,SQL服務器仍然需要訪問表。 – FLICKER

+0

@ FLICKER這是不正確的。分區視圖的目的是專門避免訪問可以根據'CHECK'約束條件中定義的特定條件從結果中邏輯排除的表。 –

回答

0

最有可能的問題是,您的CHECK約束不符合您的WHERE條件。

你的檢查約束是形式:

(datepart(year,[StockDate])=(2016)) 

WHERE條件是形式:

StockDate = '20160101' 

更改檢查約束使用完整日期(加上沒有必要使用功能 - DATEPART - 用於這樣一個簡單的過濾器)。以下是針對2016年的表格:

[StockDate] >= '01/01/2016' AND [StockDate] <= '12/31/2016' 

對其他表格重複該操作,將兩個謂詞中的年份更改爲與表格年份相匹配。

請注意,上述語法沒有說明時間組件,因爲所涉及的字段是DATE數據類型。如果數據類型爲DATETIME,那麼範圍的結束將需要表達爲:

'12/31/2016 23:59.59.997' 

有關分區視圖更多信息,請參閱MSDN頁Using Partitioned Views

+1

謝謝!那就是訣竅。 – Lock

+0

@Lock沒問題。請參閱我剛纔對有關您使用的確切數據類型的答案的更新。 –