- - PR -
SQL Server 2008 BETWEEN句の使い方につい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-11-25 21:08
yangjiayi さんの懸念されるように、この問い合わせに
有効に働くインデックスを作るのは難しいかと思います。 件数と頻度によっては、素直に全件検索が吉かと思います。 ただ、適用開始日と、終了日の期間に上限がある場合は、 いくらか工夫できる気がします。 例えば、期間の上限が1年である事が分かっていたら、 TEKIYO_FROM が目的の日付の1年以上前であることは ありえないので、 WHERE TEKIYO_FROM BETWEEN '20070505' AND '20080505' AND TEKIYO_TO >= '20080505' というようにしてやれば、TEKIYO_FROM のインデックスを 効果的に使用できるかと思います。 また、そういったデータの特性が無ければ、そのような 細切れになったデータを別テーブルに作ってあげるのも 一つかと思います。 | ||||||||
|
投稿日時: 2008-11-26 10:29
正直、インデックスとかの話はよくわからないんですが、
って、こう置き換えられますよね?
上はわかりませんが(例えば MySQL だと同義って記述がありましたけど、SQLServer は不明)、下の方法でもインデックスが効かないんですか? | ||||||||
|
投稿日時: 2008-11-26 12:48
全体的にランダムなデータであれば、インデックスは使われるかもしれませんが、
せいぜい全データの半分程度にしか絞れないかもしれません。 そのため、インデックスが効く、効かないであれば、効くんでしょうけど、 有効に働くかどうかは疑問です。 っていうよりも、参照元の記事についての質問だったみたいなんで、 実際に発生している問題っていうよりも、そのページのような問い合わせ をする場合、インデックスを効果的に利用するにはどうすればいいかっていう 一般的な質問なのかもしれませんね。 | ||||||||
|
投稿日時: 2008-11-26 13:20
インデックスが効いているか、
不等号式に置き換えられているか等、 プランを見るのが早いと思いますよ。 | ||||||||
|
投稿日時: 2008-11-26 20:05
通常はBETWEENでOKなはず。
インデックス使うかは、オプティマイザが統計情報から勝手に判断してくれます。 いまだにルールベースでしか考えられないヤツも多いみたいだが… [ メッセージ編集済み 編集者: ハニワ祭り 編集日時 2008-11-26 20:08 ] |