我很難用這樣一種方式來表達這個問題,而這種方式對於持久的索引計算列沒有調整結果。Microsoft SQL Server能否有效地處理非持久計算列?
我的問題是,如果我有一個表,如:
CREATE TABLE Customers (
ID int,
Name nvarchar(50),
Balance money,
HasBalance AS CONVERT(bit, CASE WHEN Balance > 0 THEN 1 ELSE 0 END)
)
假設有上平衡的指標,將在SQL查詢處理器有效地處理查詢,如:
SELECT ID, Name, Balance
FROM Customers
WHERE HasBalance = 1
它是否基本上「內聯」了計算列表達式,就好像我在查詢中直接指定了案例一樣?
如果計算列的表達式在非模式綁定的用戶定義函數中,那麼怎麼辦?
編輯
我的例子不是很大,因爲,如前所述,HasBalance列不會有數據的一個很好的分配。但是,在選擇索引並選擇執行計劃時,如果忽略索引本身的效率一段時間,查詢處理器是否將如下所示處理上述查詢?
SELECT ID, Name, Balance
FROM Customers
WHERE Balance > 0
我更新了我的問題以添加更多的上下文,在那段時間裏我看到你已經非常瞭解你的編輯。所以看起來這兩個查詢不會被視爲相同。 – Josh 2010-08-13 19:34:32