Lo mas probable es que estes usando el rdd DBFCDX el cual no tiene bitmap filter, esto bitmap filter aceleran enormemente los filtros, ya que usa los indices para encontrar los registros a incluir en el filtro. (esto en Foxpro por ejemplo se llama tecnologia Rushmore, en ads es AOF)
si usas el rdd ADS podras hacer uso de esta tecnologia.
basicamente funciona de la siguiente manera.
si usas un filtro como este
select "prestamos"
set filter to fecha_pago >= date()
donde fecha_pago es un campo en la tabla a filtrar, este campo debe estar indexado, esto provocara que el filtro use el indice para encontrar mas rapidamente el registro.
y el rdd gestione mas rapidamente la inclusion del registro en el filtro, es cierto que esto es facilmente reemplazable en el rdd DBFCDX con un scope, ya que igualmente fecha_pago debe estar indexado, y hacemos un scope SetScope( date(), NIL ), aca abos tendra una velocidad similar.
pero, siempre un pero, si el filtro sube en complejidad, por ejemplo
set filter to ( fecha_pago >= date() .or. cliente_mp=.t. ) and saldo >0
ya la cosa se complica para un scope, (tu bien lo sabras, ya que esto es lo que probablemente te quito las ganas de usar scope)
si bien no es complicado usar aca un scope, genera un poco mas de trabajo, campos extras, suma de expresiones, conversiones, etc.
ahi es donde los filtros en ads local superan a un scope en dbfcdx, por que en ads solamente seria necesario crear indices a los tres campos involucrados y tachan el filtro volaran, como los Blackbird que pasaban por el cielo cuando era niño aca en nicaragua
.
si previamente indexamos los tres campos involucrados en el filtro:
index on fecha_pago tag fecha_pago
index on cliente_mp tag cliente_mp
index on saldo tag saldo
no seria necesario nada mas que tener indexado estos tres campos para que ADS use su tecnologia AOF (Advantage Optimized Filter ) para acelerar los filtros a velocidades similares a un scope.
si los tres campos estan indexados tendremos un AOF con nivel ADS_OPTIMIZED_FULL (velocidad de un ferrari)
si dos de los campos estan indexados tendremos una AOF con nivel ADS_OPTIMIZED_PART (velocidad de toyota)
y si ninguno de los tres campos esta indexado entonces tendremos una AOF con nivel ADS_OPTIMIZED_NONE el cual se comportara como tu filtro actual el cual es lento, muy lento, como el caballo del malo al final de las peliculas de vaqueros cuando los siguen los buenos.
salu2
carlos vargas