Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2007
JULIOCTORRESG JULIOCTORRESG is offline
Miembro
 
Registrado: sep 2006
Posts: 58
Poder: 18
JULIOCTORRESG Va por buen camino
Consultas o Filtros ....

Por alli vi que Caral preguntaba sobre la eficiencia o no de los filtros , repregunto porque fue en otro hilo y nadie dio su opinion al respecto ....

la cosa va asi ...tengo un modulo en el cual tengo una consulta que se activa en el evento onchange del un tedit ....asi rellena un grid y selecciono lo que busco dicha consulta funciona como es de esperar con like

select campo,campo2,campo3
from tabla
where campo like +''''+'%'+'TEdit1.Text'+'%'+'''');

la cosa no se ve mal es es bastante rapida a pesar de que la tabla tiene algo asi como 2 mil a tres mil registros pero quiero optimizar que tal si en vez de esto de llamar una y otra vez la consulta a dicha consulta aplico un filtro ....sera que mejora el rendimiento .....

esa es mi pregunta.....


gracias ante todo........
Responder Con Cita
  #2  
Antiguo 02-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si vas a realizar muchas consultas, tal vez en este caso, te sería más adecuado traerte toda la tabla a memoria de una vez e ir haciendo búsquedas en local.
Se trata de hacer la comparación entre:
* Traer toda la tabla de una vez y no volver a generar tráfico con las consultas
* Ir ejecutando consultas filtradas; Traen menos datos, pero ejecutas más.

Depende del número de consultas que ejecutes en media, te saldrá a cuenta una u otra.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 02-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Yo siempre digo lo mismo, no abusar del evento OnChange, basta que entre un administrativo con 400 pulsaciones por minuto para que tu programa empiece a temblar .

Igual de cómodo para el usuario, pero usando el evento Onkeydown:
Código Delphi [-]

if key = vk_return then
  hacer la busqueda

Así solo se pide la consulta al presionar la tecla intro, repito, cómodo para el usuario y eficiente para la Base de Datos.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 02-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Lepe
Yo siempre digo lo mismo, no abusar del evento OnChange, basta que entre un administrativo con 400 pulsaciones por minuto para que tu programa empiece a temblar
Totalmente de acuerdo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 03-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Respondiendo directamente a tu pregunta:

Normalmente cuando se habla de Filtros no quiere decir que usemos Filter y Filtered, estamos diciendo que se aplica alguna restricción a los datos mostrados.

La consulta casi siempre será más eficiente que un Filter. Con Filtered debe viajar todos los registros de la base de datos al cliente (da igual si solo tienes un ordenador), en realidad estas seleccionando todos los registros de la base de datos y después, se aplica la restricción. Si tienes un servidor bastante apurado, quizás sea mejor la opción de Neftali.

En una tabla con 2.000 registros, si buscas a un tal "pepe" con una consulta estas pidiendo 4 o 5 registros como mucho, con Filter estas pidiendo los 2.000 y después aplicar la restricción. Como ves, aun cuando tengas que hacer 3 o 4 consultas porque no encuentras los resultados que quieres, siempre viajará menos información.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 03-03-2007 a las 13:57:40.
Responder Con Cita
  #6  
Antiguo 05-03-2007
JULIOCTORRESG JULIOCTORRESG is offline
Miembro
 
Registrado: sep 2006
Posts: 58
Poder: 18
JULIOCTORRESG Va por buen camino
No me explique bien o la cosa no funciona como creo

Hola amigos gracias por sus respuestas y aprovecho para aclarar y repreguntar ....

la cosa funciona asi, yo tengo una consulta la cual se trae todos los registros(segun yo creo y si no please haganmelo saber..) en ese momento tengo todos los registros en memoria (si o no ...?) a este conjunto de registros ya en "memoria" es a quien aplico el filtro y por eso deberia ser eficiente porque el filtro se aplica a un conjunto de datos que esta en memoria o sea no me reconecto con el servidor ...o si..?

segun yo creo en mi ignorancia la cosa funciona asi, porque si no que sentido tienen los filtros en ese caso las consultas son infinitamente mejores ....


esto si que es urgente porque si estoy equivocado debo corregir algunos errores ....

gracias mil .....
Responder Con Cita
  #7  
Antiguo 05-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Deberías explicar cómo estás leyendo los datos y cómo estás aplicando los filtros.
Si cada vez ejecutas un Select (como dices en el post inicial) está claro que no estás filtrando en local. Cada vez estás trayendo los datos (todos o parte de ellos) que corresponden a esa SQL.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 05-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
También deberías explicar el contexto, ya que si piensas ejecutar un filtro cada 2 segundos, pues oye, el filtrado en local será mejor que andar pidiendo datos al servidor.

La única desventaja que tiene los filtros en local, es que no están sincronizados con el servidor, es decir, si alguien agrega un registro, con el filtro local no lo vas a ver jamás.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #9  
Antiguo 06-03-2007
JULIOCTORRESG JULIOCTORRESG is offline
Miembro
 
Registrado: sep 2006
Posts: 58
Poder: 18
JULIOCTORRESG Va por buen camino
La idea seria asi

en efecto si realizo select cada rato en ese caso la consulta no es local eso lo tengo claro, pero lo que quisiera es

llamar a la consulta por ejemplo en el activate del formulario...
y luego segun el contenido de un tedit filtrar la data de la consulta la pregunta es ....al filtrar es sobre la data local o sea en memoria producto de la consulta que se trae todos los datos ....

todo esto porque mi consulta(futuro filtro ) es sobre un tedit en el evento onchange(que porque aca porque asi lo quieren ...donde manda capitan ...) y la idea es hacer mas eficiente el uso de la red ....


gracias mil por sus respuestas
Responder Con Cita
  #10  
Antiguo 06-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Si la consulta es del tipo:
Código SQL [-]
select * from clientes order by nombre

Si obtendrás todos los datos (en memoria mientras la consulta se mantenga abierta). Después solo tienes que usar locate por ejemplo, para buscr dentro de esa consulta.

Ahora eres tú personalmente el que tiene que sopesar las contraindicaciones.
Si ese "cada rato" es cada 3 segundos, pues sí, te diría que aplicaras filtros en local. Si es un edit que solo se usará 2 o 3 veces y necesita estar informado de los nuevos registros que se den de alta, no tendrás más remedio que usar una condición where en la consulta.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #11  
Antiguo 06-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si no quieres tener la consulta abierta, puedes usar TClientDataSet para trabajar en memoria.
Cargas los datos en local, cierras la consulta y luego puedes trabajar (filtrar, ordenar,...) sobre esos datos en local.
No hace muchos días hemos estado en un par de hilos hablando del tema, incluso puedes encontrar algun ejemplo.
Busca en los foros hilos recientes sobre el tama.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
sobre consultas vs filtros. yoyo SQL 1 18-07-2006 20:14:36
Filtros..bla, bla... gandalf_27 Conexión con bases de datos 2 15-06-2006 02:11:24
Consultas SQL V.S. Consultas Clipper AGAG4 SQL 7 20-12-2005 15:59:31
Filtros gerly Conexión con bases de datos 4 08-09-2003 19:01:34
Filtros VCL fmatias Conexión con bases de datos 4 22-07-2003 21:13:05


La franja horaria es GMT +2. Ahora son las 00:07:40.


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