2011-12-15 10 views
0

私はSQL Server 2005を使用しています。SQL Server:なぜ演算子の左側をキャストするのですか?

私は友人と一緒にコーディングしていましたが、例のために左側に参加しました。

JOIN t on cast(a.foo as int) = b.foo 

彼は、私は、インデックスのすべてのパフォーマンス上の利点を失うとして、これを行う決して私に言いました。

なぜこれを意図的にやりたいのですか?

+0

最良の選択は、リファクタリングすることで、参加するフィールドが同じデータ型になるようにすることです。 – HLGEM

+0

はい、自然に私たちがしたことですが、私はちょうど左側のキャストについて興味があった:) – CodingIsAwesome

答えて

4

まあ答えはあなたの友人が言ったことのようなものです。あなたがキャストすれば、a.fooのインデックスを利用することはできません。しかし、あなたが正しい側を投げた場合、b.foo上のインデックスを利用することはできません。

最後に、不一致のデータ型に参加している場合は、どこかを失う必要があります。結合の左側または右側にあるかどうかは、データの密度に完全に依存します。実際にはどのテーブルが実際にテーブルに含まれていますか(たとえば、a.fooがインデックスに登録されていない場合)。

0

する

@test_date左手に小さい日付を配置するため、私は強い嗜好を有するT.start_dateT.end_date

によって境界近く開期間内に収まるような時間的述語を記述する場合タイムラインの場合のように、つまり

WHERE T.start_date <= @test_date 
     AND @test_date < T.end_date 

@test_dateにはCASTが含まれていますが、最初は同じ方法で書きます。すべての正直なところでは、パフォーマンス上の問題があった場合には、それを変更しようとするのはおそらく早すぎます。

関連する問題