Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-10-2008
Avatar de raorre
raorre raorre is offline
Miembro
 
Registrado: dic 2005
Ubicación: valencia
Posts: 51
Poder: 19
raorre Va por buen camino
300.000 registros

Firebird 2.1 y Delphi 2006
Buenas Tardes, haber tengo un problema serio, tengo una tabla con firebird con 300.000 de registros, estos los cargo en un clientdataset, la consulta es simple
SELECT ID,codigo1,codigo2 FROM TTabla ORDER BY codigo1,codigo2
pero claro tarda bastante , hay algun manera de optimizar de alguna forma cursores, etc...
Saludos.
Responder Con Cita
  #2  
Antiguo 29-10-2008
Avatar de raorre
raorre raorre is offline
Miembro
 
Registrado: dic 2005
Ubicación: valencia
Posts: 51
Poder: 19
raorre Va por buen camino
ah..

los campos que devuelvo estan indexados. (id,campo1,campo2)
Responder Con Cita
  #3  
Antiguo 29-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, es lógico que te tarde ya que muestras todos los registros de un sólo golpe, con un where la consulta se hace un poco más rápido, mi consejo para esos casos sería usando un procedimiento almacenado o mostrar una barra de progreso mientras se carga, ojalá otro colega te ayude con algo más optimizado.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #4  
Antiguo 29-10-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Hola raorre, la solucion es muy simple, ya que estas utilizando un TClientDataSet solo debes buscar la propiedad PacketRecords y pponer una cantidad X, la cantidad X significa que solo cargará X registros cada vez que que le solicite el dataSource, me explico, si colocas packetRecords en 1000, en un DBGrid se mostraran 1000 registros, solo que al llegar al registro 1000 automaticamente cargará otros 1000 registros y así hasta terminar de cargarlos todos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #5  
Antiguo 29-10-2008
Avatar de raorre
raorre raorre is offline
Miembro
 
Registrado: dic 2005
Ubicación: valencia
Posts: 51
Poder: 19
raorre Va por buen camino
..

Correcto, pero no me vale porque el usuario puede pulsar el boton de ir al final de los registros y entonces me carga todos los 300.000
Lo he probado para q me cargar de 300 en 300 y va bien pero cuando le das al bton de al final te lo cargo todo


saludos
Responder Con Cita
  #6  
Antiguo 29-10-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Smile

Saludos.

No especificas si lo quieres es realizar una pantalla para ejecutar búsquedas en tu aplicación.

Siendo así el caso, esa metodología que deseas aplicar no es recomendable para ambiente Cliente/Servidor; donde tienes una PC (Servidor) con la Base de Datos que te envía la data a través de la red hasta otra PC (Cliente).

Imagina el trafico de red que estarías generando enviando ese paquete de información aunque estés usando TClientDataSet.

En mi opinión personal, un usuario no necesita navegar por 300,000 registros para encontrar uno especifico se supone que ya sabe de antemano cual registro necesita (o tiene una idea) lo que no sabe es donde esta localizado dentro de la tabla. Partiendo de este pensamiento debes de suministrarle al usuario la forma de buscar e incluso tú por dentro limitar la cantidad de registro que vas a mostrar; en caso de que no este dentro de ese grupo de registro que el usuario sea más especifico.

Ejemplo:
Código SQL [-]
SELECT ID,codigo1,codigo2 
FROM TTabla 
Where codigo1 starting with 'Hola'
ORDER BY codigo1,codigo2
ROWS 300


En mi entorno de trabajo esta es la metodología que aplicamos y hasta ahora nos a funcionado bien.

Espero no haberte cansado con esta explicación.
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #7  
Antiguo 29-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por mightydragonlor Ver Mensaje
Hola raorre, la solucion es muy simple, ya que estas utilizando un TClientDataSet solo debes buscar la propiedad PacketRecords y pponer una cantidad X, la cantidad X significa que solo cargará X registros
No conocía sobre esa propiedad, gracias mightydragonlor.

Cita:
Empezado por raorre Ver Mensaje
Correcto, pero no me vale porque el usuario puede pulsar el boton de ir al final de los registros y entonces me carga todos los 300.000
Lo he probado para q me cargar de 300 en 300 y va bien pero cuando le das al bton de al final te lo cargo todo
Yo creo que no es buena idea mostrar los 300.000 registros de golpe, deberías darle opciones de busqueda y si los cargas todos no le dejes ir hasta el final.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 29-10-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por raorre Ver Mensaje
Correcto, pero no me vale porque el usuario puede pulsar el boton de ir al final de los registros y entonces me carga todos los 300.000
Lo he probado para q me cargar de 300 en 300 y va bien pero cuando le das al bton de al final te lo cargo todo

saludos
No trabajes nunca sobre un dataset completo a no ser que sea necesario. Coloca filtros que permitan al cliente seleccionar un subconjunto del dataset, siempre. Educalo sobre la conveniencia en trabajar de esa manera. Te sorprenderás en ver como te agradecen no tener que ver datos que no les interesan.

Saludos.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #9  
Antiguo 30-10-2008
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cita:
Empezado por raorre Ver Mensaje
Correcto, pero no me vale porque el usuario puede pulsar el boton de ir al final de los registros y entonces me carga todos los 300.000
Que probabilidad hay de q pase esto? y q probailidad hay de q el usuario solo necesite ver unos cuantos registros?
La solucion de PacketRecords es la adecuada y existe tb en el componente TIBDataset llamada BufferChunks..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #10  
Antiguo 30-10-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por Delfino Ver Mensaje
Que probabilidad hay de q pase esto? y q probailidad hay de q el usuario solo necesite ver unos cuantos registros?
La solucion de PacketRecords es la adecuada y existe tb en el componente TIBDataset llamada BufferChunks..
Bueno, sentenciar que una solución es adecuada para cualquier necesidad.
En todo caso es una de las alternativas. Acaso tiene más sentido recorrer un conjunto de datos completo buscando datos que filtrar por ciertos campos?

Saludos
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #11  
Antiguo 03-11-2008
Avatar de raorre
raorre raorre is offline
Miembro
 
Registrado: dic 2005
Ubicación: valencia
Posts: 51
Poder: 19
raorre Va por buen camino
bueno al final he utilizado una mezcla del packedrecords y solo cargando el registro que me interesa..bueno un poco lioso, pero funciona de momento, gracias. unos saludos
Responder Con Cita
  #12  
Antiguo 03-11-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Nos deberias decir que es lo que quieres hacer en realidad. Por que ami personalmente me parece una locura cargar 300.000 registros en un conculta a menos que quieras hacer un reporte todos ellos lo cual tambien me parece ilogico por que de ser eso cierto que los va leer. Asi que el unico modo que veo ncesario es para hacer uana grafica o algo por estilo y de ser asi deberias agurparlo o crear un filtro.

No se es cuestion de saber para que lo quieres.

Lo que si te digo es que no tienens manera mortal de reducir el tiempo de la cosulta lo que si podrias es configurar el servidor para tenes mas cache o algo por el estilo o montar la memoria de intercambio en un usb pero tendrias que tenr una mountrocida de maquina y si existiese una maquina con esas caracteristicas te digo que el sisyema operativo para soportar tal cantidad de datos en memoria no seria windows.

Es todo lo que te puedo decir ya que no das muchas opciones de comos e te puede ayudar.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Arreglo de Registros, con arreglos de Registros(Dinamico) PiornoCKA&G Varios 4 05-01-2007 08:53:30
Actualizar Registros drkvergil Firebird e Interbase 3 12-09-2006 18:33:54
por que duplicidad de registros con clientdataset sin ingresar registros ...mysql Arturo MySQL 3 05-09-2006 18:39:37
20,000 registros ABDIGAR SQL 8 27-06-2005 19:19:58
registros que no se ven en ado joanajj Conexión con bases de datos 5 08-04-2005 22:02:54


La franja horaria es GMT +2. Ahora son las 07:05:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi