Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Rendimiento en consulta en MySQL

Estas en el tema de Rendimiento en consulta en MySQL en el foro de Mysql en Foros del Web. Hola Estoy desarrollando una aplicación con BD en MySQL y tengo problema con el rendimiento a la hora de hacer una consulta. Resulta que estoy ...
  #1 (permalink)  
Antiguo 09/11/2011, 14:13
 
Fecha de Ingreso: julio-2010
Mensajes: 41
Antigüedad: 13 años, 9 meses
Puntos: 7
Rendimiento en consulta en MySQL

Hola
Estoy desarrollando una aplicación con BD en MySQL y tengo problema con el rendimiento a la hora de hacer una consulta. Resulta que estoy haciendo una consulta que relaciona 4 tablas pero la principal de ellas tiene unos 3500 registros, en la consulta hago un order by y esto es lo que me pone lento al rededor de 03:641 seg, si le quito el order by la hace en 00:016

Por favor les pido si me pueden decir si es así de lento y si se puede optimizar o mejorar la técnica a la hora de hacer las consultas

Gracias

Código:
SELECT 
  DISTINCT (product_table.id_product),
  brand_name,
  title,
  price,
  sku,
  img_thumb,
  promotion 
FROM
  brand_table 
  RIGHT JOIN product_table
    ON brand_table.id_brand = product_table.id_brand_product 
  LEFT JOIN category_products_table
    ON product_table.id_product = category_products_table.id_product 
  LEFT JOIN category_table
    ON category_products_table.id_category = category_table.id_category 
ORDER BY title
LIMIT 20

Última edición por orlandopc09; 09/11/2011 a las 14:31
  #2 (permalink)  
Antiguo 09/11/2011, 18:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Rendimiento en consulta en MySQL

Por un lado aclaremos: ORDER BY y GROUP BY son las peores cláusulas de una consulta en cuanto a performance. Pueden hacer que una consulta que devuelve registros en 3 segundos, tarde dos horas en procesarse (no exagero, me pasó con una tabla de 70.000.000 de registros).

En ese sentido, si puedes evitar que el MySQL deba encargarse de esa operación, mejor.

Por otro lado, se puede aumentar la performance general de la consulta simplemente creando un índice INDEX sobre el campo "title", con lo que notarías una gran mejora. Obviamente pagarás la mejora de la consulta con performance en el INSERT, pero si la tabla no tiene muchas inserciones/hora, no lo notarás.

Por otro lado, yo encuentro que esa consulta es algo confusa y poco eficiente desde el inicio. No me queda completamente claro por qué usas RIGHT JOIN, ya que con ello la "brand_table" puede devolverte nulos, que no sé si estás controlando bien. En ese sentido, sería bueno que nos aclarases cuál es la tabla que posee el campo "title", ya que si fuese la primera podrías estar recibiendo resultados erróneos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 10/11/2011, 06:02
 
Fecha de Ingreso: julio-2010
Mensajes: 41
Antigüedad: 13 años, 9 meses
Puntos: 7
Respuesta: Rendimiento en consulta en MySQL

Gracias gnzsoloyo por los consejos te cuento que he hecho varias pruebas y quite los right y left join y la consulta la realizo en 00:141 seg aproximadamente, el problema es que queria utilizar esa consulta para varios propositos y al final por ahorrar algunas lineas comprometía la velocidad
  #4 (permalink)  
Antiguo 10/11/2011, 09:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Rendimiento en consulta en MySQL


Es normal. A todos nos ha pasado alguna vez, que el ahorro produce gasto...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: join, registros, rendimiento, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:35.