!!! Duda sobre la optimizacion !!!!

08/02/2005 - 16:37 por Alexander Barreto | Informe spam
Hola amigos del foro .

En un proceso de consulta, se unen tres (3) tablas para mostrarlas en un
control grid .

Me surge una duda sobre la optimizacion de mi consulta, ya que al
realizarla y probarla con la funcion =SYS(3054,12,"locopti") me dice que
no esta optimizada y me arroja este resultado.

************resultado de la variable: locopti ********************
SELECT
A.CODINV,A.NOMINV,C.NOMLINEAS,B.NOMMARCAS,A.ExisINV,A.PVPM1INV,A.PVPD1INV,A.
PVPO1INV from MAINVENTARIO A,MAMARCAS B,malineas c where
ALLTRIM(a.marcainv)==ALLTRIM(b.codmarcas) and
ALLTRIM(a.lineainv)==ALLTRIM(c.codlineas) ORDER BY CODINV INTO CURSOR DATOS
Nivel de optimización Rushmore para tabla a: nada
Nivel de optimización Rushmore para tabla b: nada
Nivel de optimización Rushmore para tabla c: nada
Combinando tabla c y tabla a utilizando índice etiqueta Lineainv
Combinando tabla b y resultado intermedio con índice temporal



el codigo es el siguiente :

USE MAINVENTARIO IN 0 order CODINV && allt(codinv) exp. del
indice
USE MAMARCAS IN 0 ORDER CODMARCAS && allt(codmarcas) exp. del indice
USE MALINEAS IN 0 ORDER CODLINEAS && allt(codlineas) exp. del
indice

=SYS(3054,12,"locopti")
SELECT
A.CODINV,A.NOMINV,C.NOMLINEAS,B.NOMMARCAS,A.ExisINV,A.PVPM1INV,A.PVPD1INV,A.
PVPO1INV ;
from MAINVENTARIO A,MAMARCAS B,malineas c ;
where ALLTRIM(a.marcainv)==ALLTRIM(b.codmarcas) and
ALLTRIM(a.lineainv)==ALLTRIM(c.codlineas);
ORDER BY CODINV INTO CURSOR DATOS

**************************************************************
Que estoy haciendo mal ?.
De ante mano muchas Gracias por su ayuda .


Alexander J. Barreto
Valencia -Venezuela
 

Leer las respuestas

#1 Alex Feldstein
09/02/2005 - 00:27 | Informe spam
On Tue, 8 Feb 2005 11:37:03 -0400, "Alexander Barreto"
wrote:


el codigo es el siguiente :

USE MAINVENTARIO IN 0 order CODINV && allt(codinv) exp. del
indice
USE MAMARCAS IN 0 ORDER CODMARCAS && allt(codmarcas) exp. del indice
USE MALINEAS IN 0 ORDER CODLINEAS && allt(codlineas) exp. del
indice

=SYS(3054,12,"locopti")
SELECT
A.CODINV,A.NOMINV,C.NOMLINEAS,B.NOMMARCAS,A.ExisINV,A.PVPM1INV,A.PVPD1INV,A.
PVPO1INV ;
from MAINVENTARIO A,MAMARCAS B,malineas c ;
where ALLTRIM(a.marcainv)==ALLTRIM(b.codmarcas) and
ALLTRIM(a.lineainv)==ALLTRIM(c.codlineas);
ORDER BY CODINV INTO CURSOR DATOS

**************************************************************
Que estoy haciendo mal ?.




Nunca uses expresiones de largo variable en indices. ALLTRIM() es una
de ellas. Siempre debes tener un largo fijo. Si es un número puedes
usar STR()/TRANS()/PAD() o similar.

Debes tener un tag por cada condicion que pongas en una consulta.

Estas buscando por ALLTRIM() lo que no te dará resultados correctos en
muchos casos, dependiendo de SET ANSI y SET EXACT los que pueden ser
diferentes en diferentes corridas. Debes cambiar tu diseño de indices,
consultas y optimización.

Como último, es siempre mala idea en cualquier version de FoxPro usar
las letras A..J + M como abreviaciones ya que puedeb causar confusión
con las areas de tablas debido a razones históricas.


Alex Feldstein
________________________________
Microsoft Visual FoxPro MVP
Please respond in the public groups so that everybody
can benefit from the exchange.
Favor de responder en los foros públicos asi todos se benefician.
(address munged with ROT-13)

Blog: http://www.bloglines.com/blog/AlexFeldstein
Website: http://feldstein.net

Preguntas similares