永続化され、インデックスが付けられた計算列の結果が表示されないような方法でこの質問を表現するのに苦労しています。
私の質問は、次のようなテーブルがあるかどうかです。
CREATE TABLE Customers (
ID int,
Name nvarchar(50),
Balance money,
HasBalance AS CONVERT(bit, CASE WHEN Balance > 0 THEN 1 ELSE 0 END)
)
Balanceにインデックスがあるとすると、SQLクエリプロセッサは次のようなクエリを効率的に処理しますか。
SELECT ID, Name, Balance
FROM Customers
WHERE HasBalance = 1
クエリでケースを直接指定したかのように、計算された列式を本質的に「インライン化」しますか?
計算列の式がスキーマにバインドされていないユーザー定義関数にある場合はどうでしょうか。
編集
前述のように、HasBalance列にはデータの分散があまり良くないため、私の例はあまり良くありませんでした。しかし、インデックス自体の効率を少し無視すると、クエリプロセッサは、インデックスを選択して実行プランを選択するときに、基本的に上記のクエリを次のように処理しますか?
SELECT ID, Name, Balance
FROM Customers
WHERE Balance > 0