2010-02-26 17 views
13

Quale di questi è meglio usare per quanto riguarda le prestazioni? ... per quanto riguarda la leggibilità/comprensibilità? ... per quanto riguarda gli standard accettati?SQL dove campo in vs. dove field = con più ors?

SELECT * 
FROM Wherever 
WHERE Greeting IN ('hello', 'hi', 'hey') 

O

SELECT * 
FROM Wherever 
WHERE Greeting = 'hello' 
    OR Greeting = 'hi' 
    OR Greeting = 'hey' 

Il primo sembra più intuitivo/chiaro per me, ma io sono sicuro di standard e prestazioni accettati.

risposta

14

più leggibile e più universalmente accettata da fare:

SELECT * 
FROM Wherever 
WHERE Greeting in ('hello', 'hi', 'hey') 

Tutti i server SQL moderni ottimizzare le query, quindi sono entrambi suscettibili di essere cambiato nello stesso codice che viene eseguito sul server in modo, le differenze di prestazioni saranno trascurabili o inesistenti.

Edit:

A quanto pare l'opzione in è più veloce, in quanto restituisce una ricerca binaria, mentre il multiplo = appena evaulates ogni affermazione individuale.

+0

Non sono sicuro sul fatto che sia più accettabile, ma la grammatica del IN è certamente più leggibile.Guarda "il saluto è in questa lista" rispetto a "il saluto è questo o il saluto è quello o il saluto è un'altra cosa" – David

0

Direi che la prima opzione che coinvolgono in:

SELECT * 
FROM Wherever 
WHERE Greeting IN ('hello', 'hi', 'hey') 

Si tratta di:

  • molto più veloce
  • più facile da leggere
  • alcuna necessità di utilizzare più or
  • meno digitando
  • più facile da mantenere in grandi query
  • ampiamente utilizzati

Altro soggetto:

SQL IN Directive Much Faster Than Multiple OR Clauses

+0

Quel collegamento non si confronta come per simili a livello SQL. Sta confrontando le prestazioni del ciclo CF/elenco valori – gbn

0

La versione IN è molto più chiara e, dal momento che è un singolo termine, evita la possibilità di parentesi mancanti o strutturate in modo errato se si aggiungono altri termini alla clausola WHERE.

Inoltre, credo che più implementazioni SQL ottimizzeranno la versione IN supponendo che sia disponibile un indice.

4

Tutti i principali motori (MySQL, PostgreSQL, Oracle e SQL Server) lo ottimizzeranno esattamente nello stesso piano.

2

Prestazioni = identiche.

leggibilità = "IN"

+1

ah- .. downvote anonimo senza commenti ... – gbn