Probaria la velocidad entrando una por una y cheueando la velocidad.
Entraria al mismo programa por ejemplo a uno de consulta.
Y bueno eso es lo primero que hay que hacer.
Ivan Martinez
>>>-----Mensaje original-----
>>>De: publice...@googlegroups.com
>>>[mailto:publice...@googlegroups.com] En nombre de
>>>Carlos Mauricio Torres Suárez
>>>Enviado el: Viernes, 13 de Mayo de 2011 09:57 p.m.
>>>Para: Comunidad de Visual Foxpro en Español
>>>Asunto: [vfp] ¿Qué Hacer?
La tecnología Rushmore es una técnica de acceso a datos que permite acceder muy eficazmente a conjuntos de registros, a velocidades comparables a las que se consigue mediante el acceso indexado a un único registro. Se denomina "Rushmore" ya que fue el nombre interno elegido para el proyecto después de ver la película "North By Northwest" de Hitchcock la noche anterior.
Con Rushmore, algunas operaciones complejas sobre tablas se realizan cientos o incluso miles de veces más deprisa que antes. FoxPro 2.5 permite que los sistemas personales manejen tablas realmente gigantescas, que contienen millones de registros, a velocidades comparables a las de los sistemas de base de datos de los grandes sistemas.
Rushmore utiliza los índices estándar de FoxPro en forma de árbol B y no requiere ningún tipo nuevo de archivo o índice. Puede utilizarse con cualquier índice FoxPro: índices estándar (.IDX) utilizados en las versiones 1.xx de FoxPro, índices compactos (.IDX) o índices compuestos (.CDX).
En particular, Rushmore no utiliza el nuevo formato de índice compacto. Los índices compactos, tanto en formato .CDX como .IDX, utilizan una técnica de compresión que produce índices de una sexta parte del tamaño que tienen los índices comparables del formato antiguo. Los índices compactos pueden procesarse más deprisa simplemente porque son físicamente menores. Esto significa que se requieren menos accesos a disco para procesarlos y que en los búferes de FoxPro se pueden almacenar fragmentos mayores del índice.
Si bien Rushmore aprovecha el menor tamaño de los índices compactos, al igual que ocurre con el acceso a archivos, también funciona perfectamente con los índices de formato antiguo.
Indices y Rushmore
Cuando Rushmore busca índices que pueden ayudar a optimizar las consultas, ignora el operador lógico NOT (NOT o !). De esta forma, desde la misma expresión se pueden optimizar más tipos de expresiones. Por ejemplo,
* Indexado según estado
COUNT FOR estado = 'OH' && optimizable
COUNT FOR NOT (estado = 'OH') && también optimizable
* Indexado según DELETED()
COUNT FOR DELETED() && optimizable
COUNT FOR !DELETED() && también optimizable
Rushmore no utiliza índices que contienen NOT o ! en sus expresiones de índice.
Cuando se están procesando tablas muy grandes, quizá Rushmore no tenga suficiente memoria para funcionar en equipos menores. En estos casos aparecerá un mensaje de advertencia ("Not enough memory for optimization") y la ejecución continuará como en las versiones anteriores de FoxPro. Si bien no se perderá ningún dato y su programa funcionará correctamente, la consulta no podrá aprovechar las ventajas que ofrece la tecnología Rushmore.
Por tanto, si va a procesar tablas grandes le sugerimos que utilice la versión Extendida de FoxPro (que se suministra sin cargo adicional alguno junto con el paquete estándar).
Debe utilizar la versión Extendida de FoxPro si sus tablas tienen en total más de 500.000 registros.
En su forma más sencilla, Rushmore acelera los comandos ejecutados sobre una sola tabla ya que utiliza cláusulas FOR que especifican conjuntos de registros en términos de índices existentes. Además, Rushmore puede acelerar la ejecución de ciertos comandos cuando está vigente SET FILTER y cuando la condición de filtrado se especifica en términos de índices existentes.
Para aprovechar Rushmore con varias tablas debe utilizar el comando SELECT de SQL. La función SQL de FoxPro utiliza Rushmore como herramienta básica para la optimización de consultas en múltiples bases de datos, ya que emplea Rushmore con índices existentes e incluso crea nuevos índices ad-hoc para acelerar las consultas.
Rushmore con múltiples tablas
Para poder utilizar la optimización que logra Rushmore cuando esté recuperando datos desde más de una tabla debe emplear el comando SELECT de SQL. SQL utiliza Rushmore como tecnología básica para optimizar sus consultas.
Cuando utilice el comando SELECT, todas las reglas que debe seguir normalmente para aprovechar Rushmore ya no estarán vigentes. SQL decide qué es necesario para optimizar una consulta y realiza el proceso automáticamente. No es necesario abrir tablas ni índices. Si SQL decide que necesita índices, creará índices temporales para su propio uso interno.
Rushmore con tablas únicas
Si utiliza tablas únicas puede aprovechar Rushmore en cualquier lugar donde aparezca una cláusula FOR. Rushmore está diseñada de forma que su velocidad sea proporcional al número de registros recuperados.
Comandos posiblemente optimizables mediante cláusulas FOR
AVERAGE INDEX
BROWSE LABEL
CALCULATE LIST
CHANGE LOCATE
COUNT RECALL
COPY TO REPLACE
COPY TO ARRAY REPORT
COUNT SCAN
DELETE SORT
DISPLAY SUM
EDIT TOTAL
EXPORT
Además de una expresión optimizable mediante una cláusula FOR, los comandos anteriores deben tener una cláusula de alcance ALL o NEXT para poder utilizar Rushmore. Rushmore también funciona cuando se utiliza el alcance predeterminado ALL.
Durante la optimización, Rushmore puede utilizar todos los índices abiertos excepto los índices filtrados y los índices únicos.
Para conseguir un rendimiento óptimo, no establezca el orden de la tabla. Puede emplear SET ORDER TO para asegurarse de que no ha establecido ningún orden. También puede mejorar el rendimiento de Rushmore estableciendo DELETED como OFF, especialmente en aquellas consultas que devuelven un gran número de registros.
Si crea índices o indicadores, recuerde que esto establece automáticamente el orden. Si desea sacar el máximo partido de Rushmore con un conjunto de datos grande y necesita que los datos estén en un determinado orden, ejecute SET ORDER TO para desactivar el control de índice y utilice luego el comando SORT.
Expresiones básicas optimizables
La tecnología Rushmore se basa en la presencia de una expresión básica optimizable en una cláusula FOR. Una expresión básica optimizable puede formar una expresión completa o puede aparecer como parte de una expresión. En la sección "Combinar expresiones básicas optimizables" se explican las reglas que rigen la combinación de expresiones básicas optimizables.
Una expresión básica optimizable adopta uno de los siguientes formatos:
<expresión índice> <operador relacional> <expresión constante>
o bien
<expresión constante> <operador relacional> <expresión índice>
En una expresión básica optimizable:
<expresión índice> debe coincidir exactamente con la expresión sobre la cual se ha construido un índice y no debe contener alias.
<operador relacional> debe ser uno de los siguientes: <, >, =, < =, > =, < >, #, !=.
<expresión constante> puede ser cualquier expresión, incluyendo variables de memoria y campos de otras tablas no relacionadas.
Por ejemplo, si tiene índices según las siguientes expresiones:
NOMBRE
NUMCLIENTE
UPPER(APELLIDO)
FECHACONTR
DIREC
las siguientes serán expresiones básicas optimizables:
NOMBRE = 'Fernando'
NUMCLIENTE >= 1000
UPPER(APELLIDO) = 'SUAREZ'
FECHACONTR < {12/30/90}
Si ejecuta el comando STORE 'WASHINGTON AVENUE' TO X, las siguientes también serán expresiones básicas optimizables:
DIREC = X
DIREC = SUBSTR(X,8,3)
Combinar expresiones básicas optimizables
La optimización Rushmore para la recuperación de datos utiliza la expresión de la cláusula FOR. Si la expresión FOR es optimizable, con una expresión de cláusula FOR simple o compleja podrá mejorarse la velocidad de recuperación de datos. En esta sección se explican las reglas que rigen la combinación de expresiones básicas para crear una expresión FOR.
Las expresiones básicas pueden ser optimizables. Las expresiones básicas se pueden combinar con los operadores lógicos AND, OR y NOT para formar una expresión compleja de cláusula FOR que también puede ser optimizable.
Una expresión creada con una combinación de expresiones básicas optimizables es totalmente optimizable. Si una o más de las expresiones básicas no son optimizables, la expresión compleja puede ser parcialmente optimizable o no ser optimizable.
Una serie de reglas determina si una expresión compuesta por expresiones básicas optimizables o no optimizables es totalmente optimizable, parcialmente optimizable o no es optimizable. En la tabla siguiente se describen las reglas a seguir para determinar la optimización de consultas; a continuación hay otra tabla en la que se muestran ejemplos.
Combinar expresiones básicas
────────────────────────────
Expr básica Optimizable
Operador AND
Expr básica Optimizable
Result consulta Totalmente optimizable
Exp básica Optimizable
Operador OR
Expr básica Optimizable
Result consulta Totalmente optimizable
Expr básica Optimizable
Operador AND
Expr básica No optimizable
Result consulta Parcialmente optimizable
Expr básica Optimizable
Operador OR
Expr básica No optimizable
Result consulta No optimizable
Expr básica No optimizable
Operador AND
Expr básica No optimizable
Result consulta No optimizable
Expr básica No optimizable
Operador OR
Expr básica No optimizable
Result consulta No optimizable
Expr básica --
Operador NOT
Expr básica Optimizable
Result consulta Totalmente optimizable
Expr básica --
Operador NOT
Expr básica No optimizable
Result consulta No optimizable
Ejemplos de expresiones
básicas combinadas
───────────────────────
Ejemplo NOMBRE = 'FERNANDO' AND FECHACONTR < {12/30/89}
Tipos expr Optimizable AND Optimizable
Operador =
Resultado Totalmente optimizable
───────────────────────────────────
Ejemplo NOMBRE = 'FERNANDO' OR FECHACONTR < {12/30/89}
Tipos expr Optimizable OR Optimizable
Operador =
Resultado Totalmente optimizable
───────────────────────────────────
Ejemplo NOMBRE = 'FERNANDO' AND 'S' $ APELLIDO
Tipos expr Optimizable AND No optimizable
Operador =
Resultado Parcialmente optimizable
───────────────────────────────────
Ejemplo NOMBRE = 'FERNANDO' OR 'S' $ APELLIDO
Tipos expr Optimizable OR No optimizable
Operador =
Resultado No optimizable
───────────────────────────────────
Ejemplo 'FERNANDO' $ NOMBRE AND 'S' $ APELLIDO
Tipos expr No optimizable AND No optimizable
Operador =
Resultado No optimizable
───────────────────────────────────
Ejemplo 'FERNANDO' $ NOMBRE OR 'S' $ APELLIDO
Tipos expr No optimizable OR No optimizable
Operador =
Resultado No optimizable
───────────────────────────────────
Ejemplo NOT NOMBRE = 'FERNANDO'
Tipos expr El operador NOT con Optimizable
Operador =
Resultado Totalmente optimizable
───────────────────────────────────
Ejemplo NOT 'FERNANDO' $ NOMBRE
Tipos expr El operador NOT con No optimizable
Operador =
Resultado No optimizable
───────────────────────────────────
También puede utilizar paréntesis para agrupar las combinaciones de expresiones básicas. Las reglas anteriores también se aplican a las combinaciones de expresiones agrupadas mediante paréntesis.
Combinar expresiones complejas
Puede combinar diversas expresiones complejas para crear una expresión más compleja que sea totalmente optimizable, parcialmente optimizable o no optimizable, según se muestra en la tabla anterior. Estas expresiones más complejas pueden combinarse a su vez para crear expresiones que, de nuevo, pueden ser total o parcialmente optimizables o no optimizables. En la siguiente tabla se muestra el resultado de combinar estas expresiones más complejas. Estas reglas se aplican también a las expresiones agrupadas mediante paréntesis.
Combinar expresiones complejas
──────────────────────────────
Expr Totalmente optimizable
Operador AND
Expr Totalmente optimizable
Resultado Totalmente optimizable
Expr Totalmente optimizable
Operador OR
Expr Totalmente optimizable
Resultado Totalmente optimizable
Expr Totalmente optimizable
Operador AND
Expr Parcialmente optimizable
Resultado Parcialmente optimizable
Expr Totalmente optimizable
Operador OR
Expr Parcialmente optimizable
Resultado Parcialmente optimizable
Expr Totalmente optimizable
Operador AND
Expr No optimizable
Resultado Parcialmente optimizable
Expr Totalmente optimizable
Operador OR
Expr No optimizable
Resultado No optimizable
Expr --
Operador NOT
Expr Totalmente optimizable
Resultado Totalmente optimizable
Expr Parcialmente optimizable
Operador AND
Expr Parcialmente optimizable
Resultado Parcialmente optimizable
Expr Parcialmente optimizable
Operador OR
Expr Parcialmente optimizable
Resultado Parcialmente optimizable
Expr Parcialmente optimizable
Operador AND
Expr No optimizable
Resultado Parcialmente optimizable
Expr Parcialmente optimizable
Operador OR
Expr No optimizable
Resultado No optimizable
Expr --
Operador NOT
Expr Parcialmente optimizable
Resultado Parcialmente optimizable
Expr No optimizable
Operador AND
Expr No optimizable
Resultado No optimizable
Expr No optimizable
Operador OR
Expr No optimizable
Resultado No optimizable
Expr --
Operador NOT
Expr No optimizable
Resultado No optimizable
La siguiente tabla contiene ejemplos de cómo se pueden combinar las expresiones complejas y la optimización que se consigue en el resultado.
Ejemplos de expresiones
complejas combinadas
───────────────────────
Ejemplo (NOMBRE = 'FERNANDO' AND
FECHACONTR <{12/30/89}) OR (APELLIDO = '' AND FECHACONTR > {12/30/88})
Tipos expr Totalmente optimizable OR Totalmente optimizable
Operador =
Resultado Totalmente optimizable
───────────────────────────────────
Ejemplo (NOMBRE = 'FERNANDO' AND FECHACONTR < {12/30/89}) AND 'S' $ APELLIDO
Tipos expr Totalmente Optimizable AND No optimizable
Operador =
Resultado Parcialmente optimizable
───────────────────────────────────
Ejemplo (NOMBRE = 'FERNANDO' AND 'S' $ APELLIDO) OR (NOMBRE = 'DAVID' AND 'T' $ APELLIDO)
Tipos expr Parcialmente optimizable OR Parcialmente optimizable
Operador =
Resultado Parcialmente optimizable
───────────────────────────────────
Ejemplo ('FERNANDO' $ NOMBRE OR 'S' $ APELLIDO) OR ('MAYOR' $ CALLE OR 'AVENIDA' $ CALLE)
Tipos expr No optimizable OR No optimizable
Operador =
Resultado No optimizable
───────────────────────────────────
Optimización Rushmore y
secuencias de ordenación
────────────────────────
Rushmore sólo puede aprovechar los índices cuya secuencia de ordenación coincida con la secuencia actual. Si va a generar índices en varios idiomas, asegúrese de que la secuencia de ordenación actual coincide con las secuencias de ordenación de las marcas de índice y los índices activos.
Utilice IDXCOLLATE() para devolver la secuencia de ordenación de un índice o de las marcas de índice; utilice SET("COLLATE") para devolver la secuencia de ordenación actual.
Desactivar Rushmore
───────────────────
En algunas ocasiones deberá desactivar Rushmore. Cuando ejecute un comando que utiliza Rushmore, Rushmore determinará inmediatamente qué registros cumplen la expresión de la cláusula FOR. Luego, el comando manipula estos registros.
Si un comando posiblemente optimizable modifica la clave de índice de la cláusula FOR, quizá el conjunto de registros Rushmore quede obsoleto. En este caso, puede desactivar Rushmore para asegurarse de que obtiene la información más actualizada de la tabla/.DBF.
Si desea desactivar Rushmore para un comando individual, incluya la palabra clave NOOPTIMIZE junto con el comando. Para desactivar (o activar) globalmente Rushmore para todos los comandos que aprovechan la tecnología Rushmore, utilice SET OPTIMIZE. El comando SET OPTIMIZE OFF desactiva Rushmore y SET OPTIMIZE ON activa Rushmore. La opción predeterminada es ON.
───────────────────────────────────
Vea también: SET OPTIMIZE, IDXCOLLATE(), SET COLLATE
───────────────────────────────────
Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________
Huuuu..., la base de datos es Nativa??? si es asi te gugiero que utilices el modelo cliente-servidor con SQL server, MySQL, Firebird o cualquier otro.Saludos,Alfonso
De: Carlos Mauricio Torres Suárez <cama...@ctsoft.com.ec>
Para: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Enviado: sáb,14 mayo, 2011 01:26
Asunto: [vfp] ¿Qué Hacer?
Ivan
>>>-----Mensaje original-----
>>>De: publice...@googlegroups.com
>>>[mailto:publice...@googlegroups.com] En nombre de
>>>Carlos Mauricio Torres Suárez
>>>Enviado el: Sábado, 14 de Mayo de 2011 10:25 a.m.
>>>Para: Comunidad de Visual Foxpro en Español
>>>Asunto: [vfp] Re: ¿Qué Hacer?
Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________