2010-10-11 29 views
14

Estoy usando MySQL para almacenar datos de videojuegos. Tengo tablas para títulos, plataformas, etiquetas, insignias, reseñas, desarrolladores, editores, etc. ...¿Es mejor devolver una consulta grande o algunas más pequeñas?

Cuando alguien está viendo un juego, ¿es mejor tener una consulta que devuelva todos los datos asociados con un juego? ¿o es mejor usar varias consultas? Intuitivamente, dado que tenemos revisiones, parece inútil incluirlas en la misma consulta ya que necesitarán ser paginadas. Pero hay otras situaciones en las que no estoy seguro si se puede desglosar la consulta o usar dos consultas ...

Estoy un poco preocupado por el rendimiento ya que ahora me uno a los juegos de las siguientes tablas: desarrolladores, editores , metaetiquetas, insignias, títulos, géneros, subgéneros, clasificaciones ... para obtener insignias del juego, (de games_badges; tabla de muchos a muchos para juegos, y muchos para muchos para insignias) Puedo hacer otra combinación, o ejecutar una consulta por separado .... y no estoy seguro de qué es lo mejor ...

Respuesta

7

No hay panacea.

  1. Intente obtener siempre los datos necesarios.
  2. No hay respuesta si una consulta grande o varias pequeñas es mejor. Cada caso es único y para responder a esta pregunta, debe perfilar su aplicación y examinar las consultas 'EXPLAIN s
10

Es significativamente más rápido utilizar una consulta que utilizar varias consultas porque el inicio de una consulta y el cálculo del plan de consulta en sí es costoso y ejecutar múltiples consultas en una fila ralentiza el servidor más cada vez. Obviamente, solo debería obtener los datos que realmente necesita, pero cada vez son menos las consultas.

Así que si va a mostrar 20 juegos en una página, puede acelerar la consulta (aún usando solo una consulta) con una cláusula LIMIT y solo ejecutar esa consulta más adelante cuando pasen a la página siguiente. Eso o solo puede hacer que esperen a que se complete la consulta y tener todos los datos a la vez. Una gran espera o varias pequeñas esperas.

tl; dr use tan pocas consultas como sea posible.

+7

se debe ejecutar un análisis de rendimiento antes de llegar a 'significativamente Más rápido'. –

+0

Sí, tiene razón al decir que "significativamente más rápido" es una conclusión. Esto supone que ambos conjuntos de consultas dan la cantidad óptima de datos. Una consulta puede ser mucho más lenta si se obtienen datos que no se necesitan en comparación con muchas consultas pequeñas que solo obtienen datos exactos. –

+0

el rendimiento de la consulta depende no solo de la cantidad de datos que devuelve. Aún más: el rendimiento de la consulta depende del plan de ejecución de la consulta, que depende de las condiciones de la consulta. – zerkms

3

Esto generalmente es un problema de procesamiento.

  • si hacer una consulta implicaría la recuperación de miles de entradas, llamar a varias consultas a tener mysql lo procesan (sumas, etc.)
  • si hacer varias consultas implica la realización de decenas o cientos de ellos a continuación, llamar a una sola consulta

Obviamente siempre estás enfrentando ambas cosas ya que ni es una opción Goto si usted está haciendo la pregunta, así que las opciones realmente son:

  1. escoger el puede recibir el golpe en
  2. caché o mitigar tanto como sea posible para que usted tener un éxito muy raramente
  3. intenta insertar los datos que se procesan en la base de datos para ayudarle a procesar los datos actuales
  4. lo procesan como parte de un cron y tener la aplicación sólo recuperar los datos
  5. dar unos pasos hacia atrás y explorar otras posibles aproaches que no requieren el procesamiento
Cuestiones relacionadas