Sin el ánimo de entrar en discusiones baladíes, el compañero Edorantes no habla de un@ Table, habla de una consulta (Query).
Tuve que volver a leer el hilo para comprobarlo. ¡Hubiera jurado haber leído que estaba usando Tables!

Vaya que ando mal... tengo el cerebro quemado con mis proyectos. Mejor me voy a jugar a un videojuego y descanso la cabeza...
Mis diculpas si alguien se ha sentido ofendido.
Lo de los filtros es algo muy relativo y como dice Egostar, depende, depende, depende .... Solo basta mirar por ejemplo, que son justo filtros los que usan muchos componentes de acceso a datos descendientes de TDataset para manejar las relaciones Maestro - Detalles, y estos pueden incluir desde 0 registros hasta miles, solo por citar un ejemplo.
El rendimiento en las consultas que involucran muchos registros pasa más por detalles como el concepto de paginación (Fetch records), traer registros por demanda ( Fetch On Demand) y la sincronización con componentes visuales (dbGrid), todo depende de la implementación de cada componente.
Ahora bien para no salirnos de la pregunta del interesado, vuelvo y repito el problema principal de rendimiento no se debe a que sea un filtro o una consulta, se debe a la cantidad de veces que se tiene que ejecutar el procedimiento (cualquiera que sea) en el evento OnChange de un TEdit; supongan que en vez de un filtro hace una consulta que satisfaga lo que quería hallar en el filtro y le pasa como parámetro el contenido del TEdit e intenta ejecutarla en el evento ONChange de este, si la consulta devuelve muchos registros, pues la aplicación vuelve y se cuelga porque tiene que ejecutarse tantas veces como letras escriba; por lo tanto para dar respuesta concreta a la pregunta sugiero que use el evento ONKeyPress para ejecutar un filtro o una consulta.
Un cordial saludo,
Pues si, son varias cosas. Pero lo fundamental es como dices, la veces que se debe ejecutar la consulta. Para tablas muy grandes las búsquedas incrementables no son del todo buena idea. Las opciones que se han propuesto ayudan mucho a mitigar, o a reducir estos efectos. Pero hay otros enfoques que directamente atacan a estos síntomas.
Bueno en los anteriores casos que hemos trabajado con el filtro no nos habia dado problemas con pocos registros
y se venia trabajando bien.
La idea era que si el cliente requeria o no se acordaba de un registo le dabamos la opcion de mostrale todos
en un grid ligado a un dataset y ponerle un filtro mediante el evento onChange del filtro conforme iba escribiendo se haria el filtrado
usando la propiedad filter del dataset
pero como ahora los registros sobrepasan los 30,000 eso hace que la aplicacion se congele.
Por lo que ustedes comentan la opcion que veo mas viable es de utilizar el onKeyPress y hacer el
filtrado por palabra
Esto que comentas es un caso clásico: Se prepara un sistema, y no se termina de ver el alcance del crecimiento de una base de datos. Error típico de "bueno, si no lo recuerda le mostramos todo".
Si para ya 1000 registros es molesto darle al usuario... ¡imaginte los 30mil que dices!
Allí hay un defecto de diseño. ¡No le muestres todos si son miles de miles! Hazlo más simple: solo pon los campos por los cuales buscar, y que luego el sistema ejecute consultas. No filtres, ¡Que se ejecuten consultas de tipo búsquedas más restrictivas!
O bien, en lugar de mostrar todos. Muestra los x más usados/populares/consultados/etc. Si no está allí recién buscar. De todas formas trata de hacer que la búsqueda sea lo más directa posible de modo que los resultados lleven a pocos registros.
Piensa que es frustante para un usuario que una búsqueda le devuelva 1000 registros, cuando el sólo está esperando 1 o 10. Cuanto más directo se sea para llegar al resultado mejor será.
Saludos,