で、どんな時に使うと効果的か。
テーブルに収めるロジックなのだから、基本的に変更されることがないロジックであるべきなのだろう。たとえば、[数量] * [単価] で [金額] 的なことだけど、該当のレコードが頻繁に更新されるものでなければよいということ。といっても、レコード数とマシンスペック次第だから選択は "お好みで"。きっと、ほとんど参照のみのテーブルに使うと効果はでやすいはず。
MSのサンプルでも使われているけれども、名簿要素なテーブルに使うイメージがとても強い。[姓] & " " & [名] とか。MSのサンプルだといろんなフィールドを結合して検索用にしてあるよね。この場合、フィールドを演算する必要がないからその分クエリのパフォーマンスは高くなるという手筈。さて、もう少し具体的に。
[社員名] (String)/ [入社日] (Date)/ [入社年度] (Integer)を持つテーブルがあって、[入社年度] についてどうするか。
集計フィールドを用いない場合、[入社年度] にまつわるクエリに関しては、
SELECT
T_社員.ID,
T_社員.社員名,
T_社員.入社日,
Year(DateSerial(Year([入社日]),Month([入社日])-3,1)) AS 入社年度
FROM T_社員;
という感じになって、都度の演算が必要なる。集計フィールドを使う場合は、すでに [入社年度] は演算済みだから参照クエリのパフォーマンスが低下がない。
集計フィールドにはインデックスを設定することができないから、さらなるパフォーマンスが必要ならば、以前からある方法や データマクロ で [入社年度] の値を演算して設定すればよい。
また、テーブルに埋め込まれたロジックなので、Access 必須ということではない。ACE14.0 がインストールされた環境であればよいことは確認した。だから。PowerShell とかから accdb を操作しても集計フィールドは動作をしている。
0 件のコメント:
コメントを投稿