EXISTS
sprawdzi, czy w zestawie istnieje jakiś zapis. więc jeśli robisz SELECT z 1 miliona rekordów lub robisz SELECT z 1 rekordu (powiedzmy, używając TOP 1), będą mieli ten sam rezultat i tę samą wydajność, a nawet ten sam plan wykonania. (dlaczego?) Ponieważ istnieje, nie będzie czeka na zakończenie 1 miliona skanów rekordów (lub 1 skanowanie zakończone). Ilekroć znajdzie rekord w zestawie, zwróci wynik jako PRAWDA (Nie ma znaczenia, w tym przypadku używasz * lub nazwa kolumny oba będą miały taki sam wynik wydajności).
USE pubs
GO
IF EXISTS(SELECT * FROM dbo.titleauthor)
PRINT 'a'
IF EXISTS(SELECT TOP 1 * FROM dbo.titleauthor)
PRINT 'b'
poniżej jest plan wykonania dla tych zapytań (jak mam problem, Przekątna, mam przycięte to obraz)
Ale ten scenariusz i wydajność, a nawet plan wykonania będzie zupełnie zmiana kiedy używasz zapytań następująco (nie wiem, dlaczego należy korzystać z tej strony internetowej!):
USE pubs
GO
IF EXISTS(SELECT * FROM dbo.titleauthor)
PRINT 'a'
IF EXISTS(SELECT 1)
PRINT 'b'
w tym scenariuszu, jak SQL Server nie musi Perfo rm każda operacja skanowania w drugim zapytaniu, wówczas plan wykonania zostanie zmieniony następująco:
'terminy select' w' exists' podzapytania są ignorowane, co czyni ten wybór to kwestia preferencji. –
To nie ma znaczenia. oba mają taką samą wydajność –
Nigdy nie używam SELECT 1, ponieważ wygląda to brzydko i mówi mi, że programista zbyt dużo uwagi na temat wydajności, nie wiedząc, jak to naprawdę działa. –