- PR -

SQL Server 2008 BETWEEN句の使い方につい

投稿者投稿内容
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2008-11-25 21:08
yangjiayi さんの懸念されるように、この問い合わせに
有効に働くインデックスを作るのは難しいかと思います。

件数と頻度によっては、素直に全件検索が吉かと思います。


ただ、適用開始日と、終了日の期間に上限がある場合は、
いくらか工夫できる気がします。

例えば、期間の上限が1年である事が分かっていたら、

TEKIYO_FROM が目的の日付の1年以上前であることは
ありえないので、

 WHERE TEKIYO_FROM BETWEEN '20070505' AND '20080505'
 AND  TEKIYO_TO >= '20080505'

というようにしてやれば、TEKIYO_FROM のインデックスを
効果的に使用できるかと思います。


また、そういったデータの特性が無ければ、そのような
細切れになったデータを別テーブルに作ってあげるのも
一つかと思います。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-11-26 10:29
正直、インデックスとかの話はよくわからないんですが、
コード:
'20080505' BETWEEN TEKIYO_FROM AND TEKIYO_TO


って、こう置き換えられますよね?
コード:
TEKIYO_FROM <= '20080505' AND TEKIYO_TO >= '20080505'


上はわかりませんが(例えば MySQL だと同義って記述がありましたけど、SQLServer は不明)、下の方法でもインデックスが効かないんですか?
武史
ベテラン
会議室デビュー日: 2007/09/21
投稿数: 71
投稿日時: 2008-11-26 12:48
全体的にランダムなデータであれば、インデックスは使われるかもしれませんが、
せいぜい全データの半分程度にしか絞れないかもしれません。

そのため、インデックスが効く、効かないであれば、効くんでしょうけど、
有効に働くかどうかは疑問です。

っていうよりも、参照元の記事についての質問だったみたいなんで、
実際に発生している問題っていうよりも、そのページのような問い合わせ
をする場合、インデックスを効果的に利用するにはどうすればいいかっていう
一般的な質問なのかもしれませんね。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-11-26 13:20
インデックスが効いているか、
不等号式に置き換えられているか等、
プランを見るのが早いと思いますよ。
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2008-11-26 20:05
通常はBETWEENでOKなはず。
インデックス使うかは、オプティマイザが統計情報から勝手に判断してくれます。
いまだにルールベースでしか考えられないヤツも多いみたいだが…

[ メッセージ編集済み 編集者: ハニワ祭り 編集日時 2008-11-26 20:08 ]

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