2012-10-10 12 views
5

Używam programu SQL Server 2008 R2Różnica między różnymi sposobami pisania IF istnieje?

Chcę po prostu sprawdzić, czy coś istnieje w tabeli

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' 

mają one żadnych różnic w wyniku/efektem ubocznym/wydajność (nie ważne jak małe)?

Dziękuję

Odpowiedz

6

Absolutnie żadnej różnicy - w IF EXISTS(...) sprawdzi tylko dla istnienia wierszy na podstawie klauzuli zawartej w wyciągu WHERE.

Cała reszta w oświadczeniu nie ma znaczenia - nie ma znaczenia, czy używasz SELECT * lub SELECT 1 lub lub SELECT TOP 1 *. Nawet przy użyciu SELECT * .... nie można wybrać wszystkich kolumn z tabeli - to ponownie sprawdza istnienie danych na podstawie klauzuli WHERE.

Wszystkie pięć zapytań mają dokładnie samo wykonanie planu

+0

Dziękujemy! Czyli sugerujesz, że te zapytania mają pewne różnice, gdy nie są sparowane z IF EXISTS? – user1589188

+0

@ user1589188: sure - jeśli masz "stand-alone" 'SELECT *' - to jest złe, ponieważ dostajesz (a) wszystkie kolumny (naprawdę potrzebujesz *** wszystkie *** kolumny ???), (b) nie określając, które kolumny mają być (może się nieprzyjemnie zaskoczyć, jeśli w pewnym momencie dodana zostanie kolumna BLOBa) i tak dalej. Gdy nie ma w środku "JEŚLI EGZAMINÓW (...)", zalecam ** nigdy ** używać 'SELECT *' (zdecydowanie nie w twoim kodzie produkcyjnym) - zawsze używaj ** wyraźnych ** list kolumn i chwyć jak mało kolumn tak jak naprawdę potrzebujesz. –

3

Nie ma różnicy, plan wykonanie wydaje się być takie same.

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

+1

Wow! Świetny wkład! Dzięki za twój wysiłek! – user1589188

+0

@ user1589188, zapraszam – Habib

+0

@Habib które narzędzie zostało użyte do wizualizacji i czy jest coś, co możesz polecić. –

Powiązane problemy