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

Lentitud con join + order by

Estas en el tema de Lentitud con join + order by en el foro de Mysql en Foros del Web. Buenas a todos, Tengo una consulta que va super rápida, excepto cuando le añado el order by. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT   ...
  #1 (permalink)  
Antiguo 08/05/2016, 17:46
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 7 meses
Puntos: 19
Lentitud con join + order by

Buenas a todos,

Tengo una consulta que va super rápida, excepto cuando le añado el order by.

Código MySQL:
Ver original
  1.  
  2. w.profile_country,w.profile_title,  w.profile_code, w.mode, w.pop,  w.profile_avatar,w.system,  w.title,w.code, w.masterpiece,w.i,w.path,w.no_listed,w.d   
  3.  
  4. FROM contents w  INNER JOIN follows x ON x.f=w.p WHERE (w.no_listed="0000-00-00 00:00:00") and w.mode='post' and x.p='4375'  order by w.i limit 19

Son 2 tablas, una de contenido y otra de seguidores. La consulta lo que hace es mostrar las publicaciones de los seguidores de un usuario.

El asunto es que la consulta sin "order by" tarda menos de 1 segundo, en cambio si le pongo el order by tarda 20 segundos. Las tablas no superan los 500.000 registros, así que creo que estoy haciendo algo mal.

Por que el join y el order hace que me vaya lenta la consulta?

Gracias por ayudarme.
  #2 (permalink)  
Antiguo 08/05/2016, 19:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Lentitud con join + order by

La cláusula ORDER BY es antiperformantica por definición. Optimizarla es siempre difícil.
Hasta el manual de referencia lo dice.
__________________
¿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 09/05/2016, 17:53
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 7 meses
Puntos: 19
Respuesta: Lentitud con join + order by

Y que solución me recomiendas gnzsoloyo?

Me imagino que este tipo de consultas de contenido + seguidores es algo común en las aplicaciones web.

¿Se te ocurre alguna forma de acelerarlo?, aunque sea tirar por la borda todo lo creado hasta ahora. Igual cambiar las tablas por completo.

Es que la verdad, no se me ocurre como hacerlo de forma diferente, jaja.
  #4 (permalink)  
Antiguo 09/05/2016, 17: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: 17 años
Puntos: 2658
Respuesta: Lentitud con join + order by

Por lo pronto indexa el campo "i" de la tabla "contents"... Es el campo sobre el que aplicas el ORDER BY:
Código MySQL:
Ver original
  1.     w.profile_country,
  2.     w.profile_title,
  3.     w.profile_code,
  4.     w.mode,
  5.     w.pop,
  6.     w.profile_avatar,
  7.     w.system,
  8.     w.title,
  9.     w.code,
  10.     w.masterpiece,
  11.     w.i,
  12.     w.path,
  13.     w.no_listed,
  14.     w.d
  15.     contents w
  16.         INNER JOIN
  17.     follows x ON x.f = w.p
  18.     (w.no_listed = '0000-00-00 00:00:00')
  19.         AND w.mode = 'post'
  20.         AND x.p = '4375'
__________________
¿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 17/06/2016, 04:27
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 7 meses
Puntos: 19
Respuesta: Lentitud con join + order by

Buenas gnzsoloyo,

Muchas gracias!... no pude contestarte, ya que no el foro no me dejaba logearme.

Muchas gracias!

Salbatore

Etiquetas: join, lentitud, order, registros, select, 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 16:20.