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

Optimizar consulta SQL

Estas en el tema de Optimizar consulta SQL en el foro de Mysql en Foros del Web. Buenos días. Tengo las siguientes tablas: users ID NAME 1 john 2 jack 3 kate 4 sawyer tasks ID USER_ID TITLE 1 1 mow lawn ...
  #1 (permalink)  
Antiguo 21/04/2011, 08:30
Avatar de claus0618  
Fecha de Ingreso: noviembre-2008
Ubicación: USA
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 0
Pregunta Optimizar consulta SQL

Buenos días. Tengo las siguientes tablas:

users
ID NAME
1 john
2 jack
3 kate
4 sawyer


tasks
ID USER_ID TITLE
1 1 mow lawn
2 2 take out trash
3 1 file taxes
4 2 wash dishes
5 1 learn ruby
6 3 groom dog

Y quiero obtener el nombre y la cantidad de tareas de los usuarios con mas de dos tareas. La solución que encuentro es:

Código SQL:
Ver original
  1. SELECT name, cnt
  2. FROM (SELECT COUNT(t.user_id) cnt, u.name
  3. FROM tasks t INNER JOIN users u ON u.id=t.user_id
  4. GROUP BY t.user_id) AS copy_table
  5. WHERE cnt > 1

Hay alguna manera de mejorar esta solución? Muchas gracias.
  #2 (permalink)  
Antiguo 21/04/2011, 08:44
 
Fecha de Ingreso: noviembre-2009
Mensajes: 226
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Optimizar consulta SQL

Recuerdo haber leido que una subconsulta dentro del where es más eficiente.

Y es muy fácil adaptar esta. Si no sabes comentas!

Un saludo.
__________________
Mi blog: magdkudama.com

Mi clase de validación de datos: magdkudama.com/validation
  #3 (permalink)  
Antiguo 21/04/2011, 08:46
Avatar de claus0618  
Fecha de Ingreso: noviembre-2008
Ubicación: USA
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Optimizar consulta SQL

Podrias dar el ejemplo?

Muchas gracias
  #4 (permalink)  
Antiguo 21/04/2011, 08:55
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: Optimizar consulta SQL

Te estás complicando demasiado:
Código MySQL:
Ver original
  1. SELECT name Nombre, count(t.user_id) CantTareas
  2. FROM tasks t INNER JOIN users u ON u.id=t.user_id
  3. GROUP BY t.user_id
  4. HAVING CantTareas > 1;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 21/04/2011, 09:14
Avatar de claus0618  
Fecha de Ingreso: noviembre-2008
Ubicación: USA
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Optimizar consulta SQL

Muchas gracias gnzsoloyo, habia olvidado que existía el Having. En cuanto a eficiencia, tambien es mejor esta solucion? Hablando de que la tabla usuario esta en constante crecimiento y las diferentes tareas son mas o menos unas 500?
  #6 (permalink)  
Antiguo 21/04/2011, 09:27
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: Optimizar consulta SQL

Empieza a preocuparte cuando estés trabajando con cientos de miles... Antes de eso, la consulta no impacta la performance de una forma detectable.
De todos modos, cuando llegues al nivel de tener que preocuparte, deberás procurar crear filtrados de datos más acotados, ya que no creo que alguien se vaya a poner a revisar un reporte de diez páginas. Al menos la directiva no lo va a hacer.
Ningún gerente quiere revisar un reporte que lleve más de dos hojas. No tienen tiempo para eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 21/04/2011, 09:47
Avatar de claus0618  
Fecha de Ingreso: noviembre-2008
Ubicación: USA
Mensajes: 21
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Optimizar consulta SQL

Jejeje un gerente no, pero un entrevistador si porque ya tiene el reporte final con la mejor consulta. Fue una pregunta que me hicieron en una entrevista, y quiero mejorar la repuesta para futuras entrevistas. Muchas gracias de todos modos.
  #8 (permalink)  
Antiguo 21/04/2011, 10:09
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: Optimizar consulta SQL

En ese caso ten en cuenta la posibilidad de crear índices sobre los campos críticos. Eso ayuda mucho (realmente mucho) a consultas con agrupamientos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 21/04/2011, 11:17
 
Fecha de Ingreso: noviembre-2009
Mensajes: 226
Antigüedad: 14 años, 5 meses
Puntos: 19
Respuesta: Optimizar consulta SQL

Joder tienes razón gnzsoloyo, no se me había ocurrido con el having :D
__________________
Mi blog: magdkudama.com

Mi clase de validación de datos: magdkudama.com/validation

Etiquetas: sql
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 22:28.