2014-11-07 7 views
5

Quale è meglio nei seguenti casi.Quale è meglio selezionare 1 vs selezionare * per verificare l'esistenza del record?

1.

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

Vs

2.

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

o entrambi sono uguali?

+3

'termini select' in' sottoquery exists' vengono ignorate, rendendo questa scelta una questione di preferenza. –

+5

Non importa. entrambi hanno la stessa performance –

+0

Non uso mai SELECT 1 perché sembra brutto e mi dice che il programmatore si è preoccupato troppo delle prestazioni senza sapere come funziona davvero. –

risposta

6

EXISTS controllerà se esiste un record in un set. quindi se stai facendo un SELECT da 1 milione di record o stai facendo un SELECT da 1 record (diciamo usando TOP 1), avranno lo stesso risultato e le stesse performance e lo stesso piano di esecuzione. (perché?) Perché esiste non attende fino a 1 milione di scansione del record completata (o 1 scansione del record completata). Ogni volta che trova un record in un set, verrà restituito il risultato come TRUE (In questo caso non è importante utilizzare * o il nome della colonna avrà lo stesso risultato di prestazioni).

USE pubs 
GO 

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

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

sotto è il piano di esecuzione per queste query (come ho problema dimensioni dello schermo, ho ritagliato la sua immagine) enter image description here enter image description here

Ma questo scenario e le prestazioni ed anche piano di esecuzione sarà un cambiamento completamente , quando si utilizza query come segue (non so perché dovrebbe utilizzare questa query!):

USE pubs 
GO 

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

IF EXISTS(SELECT 1) 
PRINT 'b' 

in questo scenario, come SQL Server non ha bisogno di Perfo rm qualsiasi operazione di scansione a seconda query, quindi il piano di esecuzione verrà modificato come segue: enter image description here enter image description here

+0

Grazie @Vahid per una spiegazione dettagliata. – Raj

+1

@RajKumar si prega di tenere il pulsante "La risposta è utile" fermamente ;-) –

+1

@ Vahid.Ohh..yeah l'ho dimenticato.Ora è fatto – Raj

Problemi correlati