Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/07/2013, 19:52
minombreesmm
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
125567 usuarios en mi base de datos, consulta sql lenta.

primero que nada lo hacia en php y tenia como unas 300 lineas así que decidí hacerlo en un procedimiento almacenado y me quedaron 60 lineas.

bueno todo estaba bien, primero intente hacer un procedimiento almacenado que me registraba la lista de usuarios que cada usuario iba a ver en su vista en una tabla temporal..
osea para que el usuario vea a los usuarios y que sepa quien es su amigo , quien no, a quien le envió solicitud o quien se la envió, como facebook pues para que me entiendan.

funciono bien, pero se me ocurrió de que si son 100 usuarios viendo la lista al mismo tiempo esto se multiplicaría de registros temporales así que decidí mejor hacer la consulta directa en php y usar unión.
así que todo estaba bien, si tenia 100 usuarios 500 usuarios solo ponía limit 30 y listo.

y me pregunte, que va a pasar cuando tenga millones de usuarios..


asi que hice una consulta sql que me hiciera unos cuantos miles de usuarios ficticios mas y sobrepaso el millon.

y ahora quise probar en la pagina, pues despues de todo tengo el limit 30.

se quedo trabada, asi que la probe directa la consulta, y tambien duro un monton, a pesar de que tengo el limit 30.

la consulta normal a la tabla usuarios me dura 14 segundos.

total para que se den la idea.

estas son mis tablas.

usuarios
id
nombre,
apellido
etc
.
.unos 10 datos mas


amigos
idincrem
ida
idb
estadosolicitud( si,fueaceptada)

si estadosolicitud es si y si el id mio esta en a quiere decir que la envie, si esta en b que me la envio si es aceptada que es mi amigo y si no esta en la base no es mi amigo.


esas son mis tablas, como haria para mostrar lo siguiente


Roberto.- Agregar amigos
Juana.-Eliminar de mis amigos
Crystal.- Cancelar la solicitud
Efren.-Aceptar solicitud
etc
etc
esos son los 4 casos que depende de estado solicitud


yo hice esto en las consultas

select (amigos.fueaceptada union amigos.si) union usuarios not in (amigos.fueaceptada union amigos.si) limit 30.

si me entienden verdad?


uno los amigos con los que me enviaron solicitud o yo les envié y finalmente uno los que no tienen relación con la primero.

lo que me gustaría es que me dieran algún consejo para que la consulta no sea tan rápida. por que si lanzo mi pagina así, me va a tronar en los 100 mil usuarios y mas si están online, si lo probé yo mismo y en mi pc local siendo una pc potente.


ayuda, de antemano gracias

posdata, se que dura mucho por que el not in recorre el millon de registros por cada comparacion, osea se multiplica la iteracion por cada registro de amigos.

quisiera saber que me sugieren? para que esto no ocurra?
como hace facebook?
y con esto que descubri me doy cuenta que mi chat esta muy atras aun

la tabla de usuarios pesa 200 mb
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Última edición por minombreesmm; 26/07/2013 a las 21:50