Aledky91
Delta
Verificación en dos pasos activada
Hola a todos.. me ha surgido un problemilla. Tengo una tabla con unos 30 millones de registros. Le he creado indices para acceder a los datos mucho mas rapidos y la verdad es que funcionan.
Mi problema viene ahora... utilizando un limit para que muestre 100 registros a partir de un registro grande... tarda bastante en mostrarlos datos...
Para mostrar los primeros 100 registros lo hace al instante pero cuando quiero sacar registros desde el un registro numero 2000-2100 pero ya no carga igual de rapido que los 100 primeros.
Alguna sugerencia para que los datos sean mas rapidos de acceder?
¿Te sirvió? Únete a la conversación
Con tu cuenta gratis puedes responder, escribirle al autor por mensaje privado y comprar con Saldo retenido: el pago se libera cuando recibes lo acordado.
Toma 30 segundos · vuelves a este tema al terminar
MatiasVM
Gamma
Programador
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola, quizás ya sea un poco tarde para responder pero igual le puede servir a otra persona,
Cuando se trata de paginación de una gran cantidad de datos como en su caso, no es muy recomendable usar las cláusulas "limit" y "offset", asà que una alternativa por la que optar es usar "limit" sólo.
Una forma de hacer esto lo explico mejor con un ejemplo:
Insertar CODE, HTML o PHP:
SELECT algo FROM tabla WHERE id>10000 LIMIT 100
Con ésta lÃnea se están obteniendo los datos del 10000 a 10100 de una forma muchÃsimo más óptima que si lo hiciéramos con esta otra:
Insertar CODE, HTML o PHP:
SELECT algo FROM tabla LIMIT 10000,10100
Esto se debe que al usar OFFSET más grande va a aumentar el conjunto de datos activos y por tanto un menor rendimiento.
Asà que la páginación que usas no es muy eficiente para esa cantidad de datos. Si quieres saber o aclararte un poco más te dejo por aquà una presentación de Yahoo Inc:
Presentación
Saludos
Aledky91
Delta
Verificación en dos pasos activada
[MENTION=130842]Haiber[/MENTION] muchas gracias por la respuesta pero no me sirve ya que el id no indica el numero de registros que se tienen que mostrar. Mi intención no es hacer una paginación de todos los resultados de la tabla.
Mi consulta es la siguiente (ejemplo)
Select * from tabla where nombre='nombre' limit 6000,100;
Como veras lo que yo quiero es mostrar una paginacion de los resultados de esa query y no de toda la tabla. Por lo tanto el id no me sirve para esto.
Una idea que he tenido es que se podria crear una nueva columna en la tabla que indique la pagina en dicha columna dependiendo del nombre ya que no todos los nombres son iguales. El problema es que no tengo ni idea de como hacerlo. Supongo que no me quedara otra que guardar todos los datos en la cache para acceder muy rapido a los registros.
osqar
Gamma
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Algo ahi no cierra, tenes indices pero el set de datos que te trae es tan grande?, por ahi deberias pensar en migrar a una base de datos nosql....