- PR -

特定の日付範囲であるレコードの取得方法

投稿者投稿内容
がーすい粉
会議室デビュー日: 2006/09/01
投稿数: 3
投稿日時: 2006-09-04 00:41
皆様、素早いレス、そしてアドバイスありがとうございます!
すごいですね、こんなに早くレスが。

早速month関数とday関数でtryします。
パフォーマンス的には、SQLServerが機能として提供しているってことは、
そこまで意識しなくても効率的なんでしょうかね?
#実際、テストデータ○万件用意して試してみますけど。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2006-09-04 01:08
引用:
早速month関数とday関数でtryします。パフォーマンス的には、SQLServerが機能として提供しているってことは、そこまで意識しなくても効率的なんでしょうかね?


関数呼び出しのオーバーヘッドなどたかが知れています。関数を使用することの問題点は関数による計算コストではなく、統計情報とインデックスが使用できなくなってしまうことにあります。通常、統計情報とインデックスが使用できなくなるとパフォーマンスへの影響が大きいです。

なので、一般的には関数を使用せずに可能な限りパラメータを展開してクエリを SQL Server に渡すのが理想です。

しかし、今回のケースではちょっと事情が異なるかもしれません。データが日付ごとにほぼ均等に分布している場合、3, 6, 9, 12月の 15〜末日のデータというのはテーブル全体のおよそ 1/6 を占めることになります。これだけ大量のデータを取得する場合は、インデックスを使用するよりもテーブルスキャンのほうが高速になります。なので、今回のケースでは関数を使用するデメリットは顕在化しないと思います。

スキルアップ/キャリアアップ(JOB@IT)