2012-10-10 14 views
5

私は、SQL Server 2008を使用していますR2IFを書くさまざまな方法の違いはありますか?

私はちょうど何かがテーブル

IF EXISTS (SELECT * FROM ta WHERE ca = 'abc') PRINT 'YES' 
IF EXISTS (SELECT ca FROM ta WHERE ca = 'abc') PRINT 'YES' 
IF EXISTS (SELECT 1 FROM ta WHERE ca = 'abc') PRINT 'YES' 
IF EXISTS (SELECT (1) FROM ta WHERE ca = 'abc') PRINT 'YES' 
IF EXISTS (SELECT TOP 1 1 FROM ta WHERE ca = 'abc') PRINT 'YES' 

彼らは/副作用/性能の結果に違いを持たないでくださいに存在するかどうかテストしたい

(どんなに小さな)? IF EXISTS(...)だけで、あなたの文のWHERE条項に基づいて行が存在するかどうかを確認します -

答えて

6

絶対に何の違いをありがとうございません。

文中のその他のものは無関係です。SELECT *またはSELECT 1またはSELECT TOP 1 *のいずれを使用しても違いはありません。 SELECT * ....を使用しても、ではなくテーブルからすべての列を選択します。つまり、WHERE句に基づいてデータの存在を確認するだけです。

全5つのクエリは違いはありません正確同じ実行計画

+0

ありがとうございます! IF EXISTSとペアを組んでいない場合、これらのクエリにはいくつかの違いがあることを暗示していますか? – user1589188

+0

@ user1589188:「スタンドアロン」の「SELECT *」がある場合は、(a)すべての列(すべての***列が必要です)、(b )あなたが必要とする列を指定しないでください(画像のようなBLOB列がある時点で追加された場合、驚くかもしれません)。 'IF EXISTS(..) 'の中にいないときは、決して' SELECT * 'を使うことは絶対にありません(あなたのプロダクションコードでは絶対に使用しないでください)。**常に明示的な**列のリストを使い、あなたが本当に必要とするように。 –

3

を持って、実行計画は同じのようです。

enter image description here enter image description here enter image description here

+1

うわー!素晴らしい入力!お疲れ様でした! – user1589188

+0

@ user1589188、あなたは歓迎です – Habib

+0

@Habibあなたは視覚化目的のためにあなたが使用しているツールがあります。 –

関連する問題