FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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........ |
#2
|
||||
|
||||
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. |
#3
|
||||
|
||||
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:
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. |
#4
|
||||
|
||||
Cita:
__________________
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. |
#5
|
||||
|
||||
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. |
#6
|
|||
|
|||
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 ..... |
#7
|
||||
|
||||
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. |
#8
|
||||
|
||||
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. |
#9
|
|||
|
|||
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 |
#10
|
||||
|
||||
Si la consulta es del tipo:
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. |
#11
|
||||
|
||||
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|