2008-12-18 11 views

Respuesta

20

Solo hay una forma de saberlo: el tiempo.

En general, creo que una sola combinación permite que la base de datos haga muchas optimizaciones, ya que puede ver todas las tablas que necesita para escanear, la sobrecarga se reduce y puede generar el conjunto de resultados localmente.

Recientemente, tenía unos 100 Select-declaraciones que me transformó en una combinación en mi código. Con algunos índices, pude pasar de 1 minuto de funcionamiento a aproximadamente 0,6 segundos.

13

Una unión única generalmente superará múltiples selecciones simples. Sin embargo, hay demasiados casos diferentes que se ajustan a su pregunta. No es sabio agruparlos bajo una sola regla simple.

Más importante aún, una sola unión generalmente será más fácil para el siguiente programador comprender y revisar, siempre que usted y el siguiente programador "hablen el mismo idioma" cuando usa SQL. Estoy hablando del lenguaje de conjuntos de tuplas.

Igualmente importante es que el diseño físico de la base de datos y el diseño de consultas deben enfocarse primero en las preguntas que darán como resultado una mejora de diez por una velocidad, no en una velocidad de 10%. Si estuvieras haciendo miles de selecciones simples frente a una sola, podrías obtener una ventaja de diez por uno. Si está haciendo tres o cuatro selecciones simples, no verá una gran mejora en un sentido u otro.

5

todo depende de la forma en la base de datos optimizará las uniones, y el uso de índices.

tuve una consulta lenta y compleja con una gran cantidad de combinaciones. Luego lo subdividí en 2 o 3 querys menos complejas. La ganancia de rendimiento fue asombrosa.

Pero al final, "depende", debe saber dónde está el cuello de botella.

10

No trate de escribir su propio bucle unirse como un grupo de selecciones. Su servidor de base de datos tiene muchos algoritmos inteligentes para hacer combinaciones. Además, su servidor de base de datos puede usar las estadísticas y el costo de acceso estimado para elegir dinámicamente un algoritmo de combinación.

unirse a El algoritmo del servidor de base de datos es - por lo general - mejor que cualquier cosa que pueda inventar. Saben más acerca de la E/S física, el almacenamiento en caché y lo que no.

Esto le permite centrarse en su dominio problemático.

0

Si está utilizando SQL Server (no estoy seguro si esto está disponible con otros RDBMS), le sugiero que agrupe un plan de ejecución con los resultados de la consulta. Esto le dará la capacidad de ver exactamente cómo se están ejecutando sus consultas y qué está causando cuellos de botella.

Hasta que sepa lo que SQL Server está haciendo en realidad, no me atrevería a adivinar qué consulta es mejor.

0

Si su base de datos tiene muchos datos ... y hay varias combinaciones, utilice indexación para un mejor rendimiento.

externa Si hay izquierda/derecha se une en este caso, a continuación, utilizar múltiples selecciones.

Todo depende de su tamaño de base de datos, su consulta, los índices (que incluyen claves primarias y extranjeras también) ... Uno no puede llegar a la conclusión con sí/no en su pregunta.

1

Como se ha dicho antes, no hay una respuesta correcta sin contexto.

La respuesta a esto depende de (a partir de la parte superior de la cabeza):

  • la cantidad de unirse a
  • del tipo de unirse a
  • indexación
  • la cantidad de reutilización puede tener para cualquiera de las piezas separadas que se unirán
  • la cantidad de datos que se procesarán
  • la configuración del servidor
  • etc.
6

Una cosa a tener en cuenta, además de lo que se ha dicho, es que selecciona volverán más datos a través de la red que la une probablemente. Si la conexión de red ya es un cuello de botella, esto podría empeorar las cosas, especialmente si esto se hace con frecuencia. Dicho eso, su mejor apuesta en cualquier situación de rendimiento es probar, probar y probar.

Cuestiones relacionadas