本当に速いのか
前回の記事で、SQL ServerのComputed Columnについて、「Persisted Computed Columnの方が当然Selectは速くなる」と書きましたが、Webの情報を鵜呑みにして書いただけで未検証でした。
というわけで確認してみました。
前回作成したテーブル定義をそのまま利用します。
両方のテーブルにランダムなデータを10,000件入れておきます。
下記のクエリの実行計画を取得します。
SELECT [Id] ,[FirstName] ,[LastName] ,[LastNameComesFirst] ,[FullName] FROM [EmailDojo].[dbo].[Accounts] GO SELECT [Id] ,[FirstName] ,[LastName] ,[LastNameComesFirst] ,[FullName] FROM [EmailDojo].[dbo].[AccountsPersisted]
あれ?Persisted Computed Columnの方がコスト高く(61%)ないですか?
とりあえず、内訳を見てみましょう。
非Persistedのテーブルのインデックススキャン
Persistedのテーブルのインデックススキャン
非PersistedのテーブルのComputed Column(FullName計算)
Estimated I/O Costの差が結果に如実に表れたようですね。
これくらいの計算であればPersisted Computed Columnを使うとI/Oのコストがバカにならないようです。
この例ではPersisted Computed Columnはまるでメリットがないようにも見えますが、インデックスが張れたりと使いようによっては便利になると思います。