2010-02-26 17 views
13

¿Cuál de estos es mejor usar en lo que respecta al rendimiento? ... con respecto a la legibilidad/comprensibilidad? ... con respecto a los estándares aceptados?SQL donde campo en vs. donde campo = con varios ors?

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

O

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

La primera parece más intuitivo/claro para mí, pero estoy seguro de normas y el rendimiento aceptados.

Respuesta

14

Es más fácil de leer, y más universalmente aceptado que hacer:

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

Todos los servidores SQL modernas optimizar sus consultas, por lo que ambos son susceptibles de ser cambiado en el mismo código que se ejecuta en el servidor así, las diferencias de rendimiento serán insignificantes o inexistentes.

Editar:

Al parecer la opción in es más rápido, ya que se evalúa como una búsqueda binaria, mientras que el múltiplo = simplemente evaulates cada declaración individual.

+0

No estoy seguro acerca de que sea más aceptable, pero la gramática de la IN es ciertamente más fácil de leer.Mire "el saludo está en esta lista" en comparación con "saludo es esto o saludo es eso o saludo es otra cosa" – David

0

Yo diría que la primera opción implica in:

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

Es:

  • mucho más rápido
  • más fácil de leer
  • hay necesidad de utilizar múltiples or
  • menos escribiendo
  • más fácil de mantener en las grandes consultas
  • ampliamente utilizados

Más cosas:

SQL IN Directive Much Faster Than Multiple OR Clauses

+0

Ese enlace no se está comparando en el nivel de SQL. Se trata de comparar el rendimiento de la lista de valores/bucle de CF – gbn

0

la versión es mucho más clara y, puesto que es un solo término, evita la posibilidad de paréntesis faltantes o incorrectamente estructurados si agrega otros términos a la cláusula WHERE.

Además, creo que más implementaciones SQL optimizarán la versión IN suponiendo que haya un índice disponible.

4

Todos los motores principales (MySQL, PostgreSQL, Oracle y SQL Server) optimizará a exactamente los mismos planes.

2

Rendimiento = idéntico.

legibilidad = "IN"

+1

ah- .. downvote anónimo sin comentario ... – gbn

Cuestiones relacionadas