![Antiguo](http://static.forosdelweb.com/fdwtheme/images/statusicon/post_old.gif)
26/07/2013, 19:52
|
| | Fecha de Ingreso: agosto-2012 Ubicación: M.
Mensajes: 2.031
Antigüedad: 12 años, 6 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 |