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. Hola de nuevo, como he avanzado! Tengo otra duda, con una consulta (SQL) a varias tablas, pero ésta consulta pueden devolver cientos de registros. SELECT ...
  #1 (permalink)  
Antiguo 13/07/2011, 23:13
 
Fecha de Ingreso: noviembre-2008
Mensajes: 84
Antigüedad: 15 años, 5 meses
Puntos: 1
Optimizar Consulta SQL

Hola de nuevo, como he avanzado!

Tengo otra duda, con una consulta (SQL) a varias tablas, pero ésta consulta pueden devolver cientos de registros.

SELECT * FROM tabla WHERE userid=$amigo ORDER BY fecha

Esto hago para mostrar las actividades recientes de los amigos de un Usuario, o en todo caso, las novedades de mis amigos...pero acá va la duda:

Como podría optimizar la consulta, ya que quiero limitar a unos 20 o 30 registros para mostrar en genera, ordenados por fecha de mis amigos...

Al final yo guardo los datos en Arrays Ordenados por Fecha como quiero, y recorro este array con un Bucle y es aquí donde limito los datos/registros a mostrar...

for($i=0;$array[$i]<30;$i++)

Pero suponiendo que UN amigo tenga 50 registros,otro amigo tiene 2 registros, otro 100,así sucesivamente...serían cientos registros los que consulte para solo mostrar unos 20 o 30 al final...

Quisiera saber si esto al final consume más ancho de banda de mi Hosting o si queda todo el trabajo en el Servidor y también si para el usuario los resultados tardarían más que Seleccionando solo los registros necesarios...

Si es así, como podría ordenar por FECHA varias tablas a la véz para que así pueda LIMITAR a X el numero de registros y no desperdicie recursos?

Las tablas tienen en común ID,FECHA...pero los demás campos son diferentes...

  #2 (permalink)  
Antiguo 14/07/2011, 01:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Optimizar Consulta SQL

De entrada debes definir indices sobre la fecha, luego al final de la consulta que sea

SELECT .....
ORDER BY fecha DESC LIMIT 0 , 30;

O 0 , 20

Eso solo consulta los 30, 20 registros que vas a usar... los 20 o 30 ultimos por fecha (DESC)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 14/07/2011, 19:09
 
Fecha de Ingreso: noviembre-2008
Mensajes: 84
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Optimizar Consulta SQL

Eso está claro ^^, seguro no me hice entender...quiero ordenar VARIAS tablas con diferentes campos y que solo tienen en común un ID y una FECHA...individualmente no hay problemas en limitar los registros.

la cosa es que si limito a X registros cada TABLA, no me serviría, ya que un Usuario puede tener los X registros sólo de él y luego para otro usuario en la misma tabla no lo tomaría en cuenta ya que se llegó al limite de X registros.

Hagamos un ejemplo:
Tabla1->UID,direccion_foto,descripcion,visitas,FECHA
Tabla2->UID,direccion_video,descripcion,FECHA
Tabla3->UID,entrada_blog,comentario,FECHA
Tabla4->UID,grupo_participa,FECHA

Quiero hacer un LIMIT Global de esas 4 tablas por ejemplo, de varios usuarios (UID) ordenados por FECHA...claro tomando los registros de cada tabla y almacenandolos en un Array ya ordenados al final...

Por eso limitar cada tabla, no es una opción.

Estoy pensando en usar expresiones regulares, para sacar el ULTIMO REGISTRO de Cada usuario en las tablas que necesito...haciendo mas o menos esto, ya sería en PHP:

for($var=1;$var<30;$var++)
{//suponiendo que quiero limitar a 30 registros de TODOS los usuarios
SELECT * FROM tabla WHERE uid=$uid ORDER BY fecha LIMIT 0,$var
{...}
SELECT * FROM tabla2 WHERE uid=$uid ORDER BY fecha LIMIT 0,$var
{... }
SELECT * FROM tabla3 WHERE uid=$uid ORDER BY fecha LIMIT 0,$var
{... }
//y las tablas que necesite...
}

No recuerdo bien el LIMIT si era 0,$var o $var,0...solo estoy pensando de esa manera puedo hacer lo que quiero =)

Qué me decís?...estaré intentando hacerlo de esta manera,aclaro el $uid también iría cambiando dependiendo de los amigos que tenga el usuario cliente.
  #4 (permalink)  
Antiguo 14/07/2011, 20:09
 
Fecha de Ingreso: noviembre-2008
Mensajes: 84
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Optimizar Consulta SQL

Y sí, me está mostrando los registros que yo quiero por Fecha y de TODOS los usuarios, como dije anteriormente consulto un registro a la véz,de cada Usuario,y con bucles For limito ^^,

Aunque pensándolo bien, también me servía consultar todos los registros de la última semana para cada usuario XD!...ahí no me complico tanto!

Etiquetas: campos, registros, 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 14:36.