![]() |
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. |
ah..
los campos que devuelvo estan indexados. (id,campo1,campo2)
|
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. |
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.
|
..
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 |
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:
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. |
Cita:
Cita:
Saluditos |
Cita:
Saludos. |
Cita:
La solucion de PacketRecords es la adecuada y existe tb en el componente TIBDataset llamada BufferChunks.. |
Cita:
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?:o Saludos |
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
|
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. |
La franja horaria es GMT +2. Ahora son las 20:32:14. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi