2014-11-07 24 views
5

Aşağıdaki durumlarda daha iyi olanıdır.Hangisi daha iyi seçmeli?

1.

IF EXISTS(SELECT * FROM Table WHERE ID = 3) 
BEGIN 
    ------- 
END 

Vs

2.

IF EXISTS(SELECT 1 FROM Table WHERE ID = 3) 
BEGIN 
    ------- 
END 

Veya her ikisi aynı mı? Bir kümede herhangi bir kaydın olup olmadığını kontrol edecek

+3

' select' terimleri göz ardı edilir, bu seçim bir tercih meselesidir yapma. –

+5

Önemli değil. her ikisi de aynı performansa sahip –

+0

Ben asla SELECT 1 kullanmıyorum çünkü çirkin görünüyor ve bana kodlayıcının gerçekten nasıl çalıştığını bilmeden performans hakkında çok fazla söz ettiğini söylüyor. –

cevap

6

EXISTS. 1 milyon kayıttan SELECT yaparsanız veya 1 kayıttan SELECT yaparsanız (TOP 1 kullanarak söyleyin), aynı sonucu ve aynı performansı ve hatta aynı yürütme planına sahip olurlar. (Neden?) Çünkü var olmaz 1 milyon kayıt taraması tamamlanana kadar bekler (veya 1 kayıt taraması tamamlandı). Bir kümede bir kayıt bulduğunda, sonuç DOĞRU olarak döndürür (Bu durumda bir sorun yoktur * veya sütun adı her ikisi de aynı performans sonucuna sahip olacaktır). Aşağıda

USE pubs 
GO 

IF EXISTS(SELECT * FROM dbo.titleauthor) 
PRINT 'a' 

IF EXISTS(SELECT TOP 1 * FROM dbo.titleauthor) 
PRINT 'b' 

enter image description here enter image description here

(ı Ekran boyutu sorun var, ben o görüntü bu kestikten) bu sorguları için yürütme planı Ama bu senaryo ve performans ve hatta yürütme planı tamamen değişim olacak Eğer aşağıdaki gibi sorgular kullanırken, (bu sorguyu kullanmalısınız neden bilmiyorum!): Bu senaryoda

USE pubs 
GO 

IF EXISTS(SELECT * FROM dbo.titleauthor) 
PRINT 'a' 

IF EXISTS(SELECT 1) 
PRINT 'b' 

, SQL Server perfo gerekmez olarak rm ikinci sorguda tarama işlemi, daha sonra yürütme planı aşağıdaki gibi değişir: `exists` alt sorgular içinde enter image description here enter image description here

+0

Detaylı açıklama için @Vahid'e teşekkür ederiz. – Raj

+1

@RajKumar lütfen "Cevap Faydalı" düğmesini sıkıca tutun ;-) –

+1

@ Vahid.Ohh..yeah Onu unuttum.Şimdi bitti – Raj

İlgili konular