2010-07-29 18 views
5

Duplicar posibles:
Is there a performance difference between BETWEEN and IN with MySQL or in SQL in general?SQL: entre y en (que es más rápido)

Si tengo los siguientes ID:

1,2,3,4, 5,6

¿Es mejor utilizar IN o la cláusula between para borrar?

+0

Creo que el rendimiento es el mismo para consultar o eliminar. – FrustratedWithFormsDesigner

+2

Honestamente, este tipo de pregunta no puede responderse más allá de * depende *. 'between' parece estar aquí, pero ¿es más rápido? ¿Siempre será más rápido? Es considerable, en el contexto de borrar datos? Qué DBMS tienes, índices, etc. Solo tú puedes responder eso, marcando. – Kobi

+0

Lo siento MSSQL 2005 – RPS

Respuesta

9
  • Si sus identificaciones son siempre consecutiva se debe utilizar BETWEEN.
  • Si sus identificadores pueden o no ser consecutivos, entonces use IN.

El rendimiento no debería ser realmente el factor decisivo aquí. Habiendo dicho eso, ENTRE MEJOR parece ser más rápido en todos los ejemplos que he probado. Por ejemplo:

sin índices, comprobando una tabla con un millón de filas en las que cada fila tiene x = 1:

 
SELECT COUNT(*) FROM table1 WHERE x IN (1, 2, 3, 4, 5, 6); 
Time taken: 0.55s 

SELECT COUNT(*) FROM table1 WHERE x BETWEEN 1 AND 6; 
Time taken: 0.54s 

sin índices, comprobando una tabla con un millón de filas en las que x tiene valores únicas:

 
SELECT COUNT(*) FROM table1 WHERE x IN (1, 2, 3, 4, 5, 6); 
Time taken: 0.65s 

SELECT COUNT(*) FROM table1 WHERE x BETWEEN 1 AND 6; 
Time taken: 0.36s 

Un ejemplo más realista es que aunque la columna id es único e indexados. Cuando haces esto, el rendimiento de ambas consultas se vuelve casi instantáneo.

 
SELECT COUNT(*) FROM table2 WHERE x IN (1, 2, 3, 4, 5, 6); 
Time taken: 0.00s 

SELECT COUNT(*) FROM table2 WHERE x BETWEEN 1 AND 6; 
Time taken: 0.00s 

Así que yo diría que se concentren en escribir una declaración SQL clara en lugar de preocuparse por pequeñas diferencias en la velocidad de ejecución. Y asegúrese de que la tabla esté correctamente indexada porque eso marcará la mayor diferencia.

Nota: Las pruebas se realizaron en SQL Server Express 2008 R2. Los resultados pueden ser diferentes en otros sistemas.

+0

Tengo sorpresas, con una de 'in' /' between' usando los índices, y no la otra. En ambos sentidos. Hacer una consulta de repente se comporta mal (dependiendo de los valores reales) porque se procesa como un "escaneo completo" en lugar del escaneo de índice * logical * '... – pascal

+0

En la mayoría de los casos estoy de acuerdo con Mark, pero tenga en cuenta que cuando factor que debe considerar sus índices y comparar ambas opciones. He tenido casos en MySQL donde el uso de 'IN' era mucho más rápido que usar' BETWEEN'. –

4

IN es equivalente a 1 or 2 or 3 or 4 or 5

Entre equivale a >= 1 and <= 6

Personalmente me gustaría utilizar en rangos entre, pero las circunstancias específicas y los motores de base de datos puede hacer una diferencia también.

+2

+1, ** Nunca uso entre **, ¿incluye los puntos finales? todo el mundo parece olvidar, así que uso '> =' o '>' junto con '<=' o '<' y es muy claro si los puntos finales están incluidos o no. –

+0

@KM, incluye puntos finales, entre es inclusivo e imho, mal llamado. – CaffGeek

+0

@Chad, gracias ;-) pero dije 'todo el mundo parece olvidar', no es que lo haya olvidado. Para mí en inglés, 'between' significa los artículos adentro. así que cuando digo que puedes tener todo entre mis manos, ¡no me refiero a mis manos también! al escribir el código para incluir el actual '> ='/'>' y '<='/'<' queda claro exactamente lo que pretendes, lo que permite comprender mejor el código. –

2

Depende de si se implementan los índices. si el ID es la clave principal, ambas consultas deberían tener el mismo costo. Evalúa el SQL usando un generador de perfiles.

1

Entre cláusula, a menos que espere que los Id sean diferentes en el futuro.

0

Between es más rápido debido a comparaciones menores. Con la cláusula IN, cada elemento se atraviesa todo el tiempo.

Pero el propósito de ambos son diferentes:

  • Entre se utiliza cuando se está comparando con Rango de valores en una especie de secuencia.

  • IN se utiliza al comparar con los valores que no están en la secuencia .

Cuestiones relacionadas