Foros del Web » Programando para Internet » PHP »

Sistema clásico de paginacion eficaz???

Estas en el tema de Sistema clásico de paginacion eficaz??? en el foro de PHP en Foros del Web. Hola amigos, hace poco me toco en mi página crear un sistema de paginación, debido a que era algo nuevo para mí, decidí echa un ...
  #1 (permalink)  
Antiguo 02/06/2002, 07:05
 
Fecha de Ingreso: febrero-2002
Mensajes: 127
Antigüedad: 15 años, 10 meses
Puntos: 0
Sistema clásico de paginacion eficaz???

Hola amigos, hace poco me toco en mi página crear un sistema de paginación, debido a que era algo nuevo para mí, decidí echa un vistazo por la Red. Entre otras cosas ví la clase de Webstudio, pero finalmente me di cuenta de que no era lo mejor para mi caso en concreto.
Se trata de un campus virtual en el cual se podrán hacer consultas sobre los alumnos, asignaturas, carreras, etc, todo ello sobre una BD de varios miles de registros. El uso de las consultas va a ser exahustivo, por lo q pensé q debía optimizar al máximo el uso de las consultas. Mi plantemiento es el siguiente.
Lo que he visto hasta ahora es que primero se hace una consulta de todos los registros para ver el nº de registros que hay.Posteriormente en cada página se hace otra consulta utilizando LIMIT pos,numero_registros.
Esto significa 1 consulta más otra por cada página. Imaginaos que hay mucha gente consultando a la vez, esto significaría un detrimento del rendimiento.Por que no hacer lo siguiente?
Primero hacemos la consulta general para saber el nº de registros, y esa es la única consulta necesaria. A partir de hay utilizando la funcion mysql_data_seek y pasando por la url el identificador de la query podemos obtener el resto de páginas sin realiza más consultas. Bueno, he de decir que aun no lo he pasado a la práctica, pero debería funcionar. Por favor denme sus opiniones. Me interesa.
Un saludo
  #2 (permalink)  
Antiguo 02/06/2002, 20:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Re: Sistema clásico de paginacion eficaz???

mmm LIMIT .. hace eso no?

osease LIMIT puntero,desplazamiento todo en un mismo Query (consulta) .. y ademas .. obtienes los valores que necesitas y no mas .. un LIMIT obtienes desplazamiento-puntero registros y no mas .. con data seek .. haces la consulta y obtienes los "miles" de registros q puedas tener en esa BD .. y te mueves en ella ..

Recuerda que un usuario no va a mirar los "cientos" de paginas que pueda arrojar una consulta .. por eso mismo, (bajo mi punto de vista) .. lo mejor es que se hagan las consualtas que se necesiten; en este caso, que el usuario las requiera ...

Un saludo,
  #3 (permalink)  
Antiguo 02/06/2002, 20:47
Avatar de gomo  
Fecha de Ingreso: mayo-2002
Ubicación: [email protected]
Mensajes: 906
Antigüedad: 15 años, 7 meses
Puntos: 0
Re: Sistema clásico de paginacion eficaz???

Bueno de una manera usando LIMIT se hacen más consultas en la DB, esto es un problema. Ahora, si guardas toda la DB en un array (de sesion?) que se almacena en el server (ya sea en memoria ram o aun peor: en swap) y esto lo recarga aun más... Y hay peligro de que se tilde. En cambio con más consultas simplemente se hara un poco más lenta la generacion de páginas... Me equivoco?? Saludos

<div align="center"><img src="http://cablemodem.fibertel.com.ar/sainztrapaga/images/firma.jpg" width="435" height="70" border="0">
</div>
  #4 (permalink)  
Antiguo 03/06/2002, 00:10
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Re: Sistema clásico de paginacion eficaz???

Love_Uca :

Bueno, la verdad que después de leer este mensaje, me quedé pensando. Te comento que las misma razón que te dió Cluster, es la que pienso yo. Nada vas a ganar haciendo un Query gigante y sacando todos los valores, para después mostrar a medida que lo necesitas, porque justamente para eso está la paginación, para ir mostrando lo que el usuario va pidiendo.

Es verdad que ahora que lo pienso mejor, mi clase debería hacer solo 1 vez el query para obtener el total de los registros y luego pasar ese valor como parámetro, así que en cuando tenga un poco de tiempo, lo voy a implementar.

Y eso de hacer un query, y pasar el Link al ResultSet, lo estuve pensando ya que nunca lo he intentado, pero supongo que se podría hacer solo si estableces una conexion persistente con la Base de Datos, ya que de otra manera, al cerrar la página también se cierra el link con la base y ya ese Link al resultset no te serviría de nada.

Saludos.

<hr><font size=2 face="verdana">- Pablo Daniel Rigazzi (Webstudio)
<font size=1 color="#333333">COORDINADOR PROYECTO REGIONALIZACION ARGENTINA
Visita <a href="http://www.web-studio.com.ar" target="_blank">Web Studio</a> - Tutoriales Photoshop</fo
  #5 (permalink)  
Antiguo 03/06/2002, 17:30
 
Fecha de Ingreso: febrero-2002
Mensajes: 127
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Sistema clásico de paginacion eficaz???

Hola amigos, después de analizar vuestras opiniones, creo que no me habeis contestado a una cosa.
En caso de utilizar el sistema clásico con LIMIT tb necesitamos hacer esa consulta &quot;gigante&quot;, ya que yo al menos no conozco otra manera para obtener el nº total de registros. La diferencia está en que con mysql_data_seek esa será la única consulta q hagas, mientras que con vuestro método utilizarás otra consulta por página.Espero haberme explicado bien.
En cuanto a lo q dice gomo, estoy bastante de acuerdo con él, habría que estudiar si merece la pena pasar por la url el identificador de la query, realmente no sé la cantidad de recursos que puede gastar eso.
Un saludo
  #6 (permalink)  
Antiguo 04/06/2002, 00:10
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Re: Sistema clásico de paginacion eficaz???

Love_Uca, me parece que no estás bien informado y he aqui el porque de tu pregunta...
En el esquema de Paginación con LIMIT, NO es necesario hacer un query pidiendo todos los registros. Tan solo se hace un :

SELECT COUNT(*) FROM tabla

Que devuele un número.

Suerte.

<hr><font size=2 face="verdana">- Pablo Daniel Rigazzi (Webstudio)
<font size=1 color="#333333">COORDINADOR PROYECTO REGIONALIZACION ARGENTINA
Visita <a href="http://www.web-studio.com.ar" target="_blank">Web Studio</a> - Tutoriales Photoshop</fo
  #7 (permalink)  
Antiguo 04/06/2002, 08:02
 
Fecha de Ingreso: febrero-2002
Mensajes: 127
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Sistema clásico de paginacion eficaz???

Gracias Webstudio, sí que sabía eso, lo que pasa es q yo lo hacía con un mysql_num_rows, pero ahora ya veo el pq de vuestros comentarios, la consulta SELECT COUNT(*) FROM tabla hace un calculo simple que no gasta casi recursos, y luego tan solo se hace un LIMIT por cada página.
Ahora mi pregunta es: que hace el limit? coge todo y solo te muestra lo que le pides o realmente va directo a lo que le pides, es decir es más rápido o es = que si hiciese una consulta sin el limit?.
Gracias por las molestias.
un saludo
  #8 (permalink)  
Antiguo 04/06/2002, 10:04
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Re: Sistema clásico de paginacion eficaz???

El LIMIT justamente lo que hace es estar optimizado para no tener que hacer un resultSet gigante y tomar solo lo que uno necesita, sino que de la base de datos, SOLO obtienes ese SUB resultSet, siendo mucho más veloz.

Saludos.

<hr><font size=2 face="verdana">- Pablo Daniel Rigazzi (Webstudio)
<font size=1 color="#333333">COORDINADOR PROYECTO REGIONALIZACION ARGENTINA
Visita <a href="http://www.web-studio.com.ar" target="_blank">Web Studio</a> - Tutoriales Photoshop</fo
  #9 (permalink)  
Antiguo 04/06/2002, 19:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Re: Sistema clásico de paginacion eficaz???

Love_uca .. veo q no lees bien los mensajes de las respuestas ... lo que te indica Webestidio .. ya te lo dije yo unos mensajes mas arriba .. en fin .. suerte y a leer mas el manual de Mysql <a href='ir.asp?http://www.mysql.com/doc' target='_blank'>www.mysql.com/doc...</a>

Un saludo,
  #10 (permalink)  
Antiguo 05/06/2002, 00:50
 
Fecha de Ingreso: enero-2002
Mensajes: 9
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Sistema clásico de paginacion eficaz???

Estuve leyendo los mensajes y les cuento por si les sirve que hace unos meses me encontré ante la misma duda en cuanto al consumo de recursos... también se me juntaron con gente que me hablaba de velocidades de consulta. Para depsejar dudas armé un entorno de prueba.
Lo que hice fue lo siguiente: arme un programa (en PHP por supuesto) que generaba 5 millones de registros con datos en una tabla.
Dicha tabla tenía alrededor de 15 campos de todo tipo. Algunos estaban indexados, otros no, y definí un índice compartido entre dos campos.
Luego armé otro programita que hacía consultas y guardaba la hora con milésimas de segundo antes de tirar la query y luego tomaba la hora al finalizar la query. Restando obtenía el tiempo de trabajo.
Los resultados fueron sorprendentes en cuanto a velocidad si utilizaba los campos indexados tardaba centécimas en encontrar un registro en particular, en cambio si utilizaba campos no indexados realizaba una búsqueda secuencial y tardaba casi 30 segundos.
Luego probé lo del Limit y verifiqué que si ponía por ejemplo limit 0,5 apenas encontraba 5 registros coincidentes paraba y tardaba digamos 10 segundos. Si no le ponía el límit el MYSQL recorría toda la tabla y tardaba mas de un minuto. O sea que aunque solo hubiera 1 registro coincidente en toda la tabla sigue buscando mas.


Espero les sirva para algo.

Saludos!


Andres Massa
(La sabiduria me persigue... pero yo soy mas rápido)
  #11 (permalink)  
Antiguo 05/06/2002, 06:40
 
Fecha de Ingreso: febrero-2002
Mensajes: 127
Antigüedad: 15 años, 10 meses
Puntos: 0
Re: Sistema clásico de paginacion eficaz???

Hola.
Bueno Cluster, si que leí tu mensaje, y lo hice con detenimiento, sólo que no entendí bien tu respuesta, ya que mi concepción de lo que hacía limit internamente era otra, luego me dí cuenta de q estaba equivocado, y por eso cuando webstudio me lo escribió le dí la razón. Mi único error fué el no conocer la función interna q lleva a cabo LIMIT, y no es tan raro, ya que poca gente a parte de los desarrolladores de las aplicaciones SQL saben a ciencia cierta el funcionamiento de esas funciones.
Por cierto muchas gracias por tu comentario Andrés, me ha sido de mucha ayuda.
Un saludo
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 12:24.