分區視圖我有以下幾點看法沒有檢查
create view V(CategoryId, ...)
as
select 1, .... from T1 union all
select 2, .... from T2 union all
select 3, .... from T3 union all
select 4, .... from T4 union all
select 5, .... from T5 union all
...
我沒有列CategoryId
添加下劃線表,因爲每個表都有固定值,因此我不能添加Check(CategoryId = 1)
由於列沒有按物理上是存在的。
以下查詢將掃描所有表。這是一種讓執行計劃只掃描一個查詢表的方法嗎?
declare @id tinyint = (....);
select * from V where CategoryId = @id and ...
你肯定* *它會掃描所有的表?看看不應該掃描的實際執行計劃和「執行次數」。或'SET STATISTICS IO ON'的輸出。另外我認爲你不打算在你的示例視圖定義中有多個'T1'引用? –
我已經更新了這個問題。 sql'select ... from CategoryId = 1'將只掃描一個表。但是,sql'declare @id tinyint =(...);選擇... from CategoryId = @ id'將掃描所有表格。 – ca9163d9
即使您的編輯我沒有看到它掃描所有的表。它們出現在計劃中,但表訪問在它之前有一個帶有啓動謂詞的過濾器,因此只有在參數值需要時纔會執行。你是否檢查了我在第一條評論中提到的兩件事情? –