Optimizacion paginacion grandes bases datos

  • Autor Autor Aledky91
  • Fecha de inicio Fecha de inicio
Aledky91

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?
 
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
 
[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.
 
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....
 
Atrás
Arriba