Caro,
Voc� pode fazer o seguinte:
No FROM colocar a tabela de maior volume de dados (tuplas) na frente,
deixando em ordem decrescente.
Todas as colunas identificadas pelo ALIAS da tabela
Colocar na query binds ao inv�s de colocar diretamente o nome 'SAPATO'.
Como alguns bancos dados t�m cache de querys. Assim, se um outro usu�rio
precisar fazer a mesma consulta, se j� estiver no cache, j� estar�
compilada pelo SGBD e n�o far� o 'parse' da query novamente.
Trocar o LIKE por BETWEEN da forma que segue no exemplo.
Nas querys colocar sempre as restri��es na frente, depois os JOINS
Verifique se os �ndices das tabelas citadas est�o ok. � IMPORTANTE que
a escrita da cl�usula WHERE esteja escrita na ordem em o �ndice foi
constru�do.
Em �ltima inst�ncia criar um �ndice para a coluna DCR_PROD, se isso n�o
tiver melhorado.
Espero ter ajudado.
Fl�vio B�rrios
Procenge
string: sCodPrdIni
string: sCodPrdFinal
Set sCodPrdIni = 'SAPATO'
Set sCodPrdFinal = 'SAPATO' || 'ZZZ'
SELECT
A.COD_PRD, A.DCR_PRD, B.COD_LJA, C.COD_DET, C.QTD_ETQ ,
B.PRECO_VENDA
FROM
TBL03 C, TBL02 B, TBL01 A
WHERE
DCR_PRD BETWEEN :sCodPrdIni AND :sCodPrdFinal
A.CO = B.CO AND A.COD_PRD = B.COD_PRD AND
B.CO = C.CO AND B.COD_PRD=C.CODPRD AND
B.CODLJA = C.CODLJA
Sadepe Inform�tica <[EMAIL PROTECTED]> on 19/02/2000 10:36:36
Please respond to [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
cc: (bcc: Flavio Barrios/Procenge)
Subject: [sqlwin] Indices para Pesquisa
Caros colegas,
estou com um problema de performance numa query. Tentei algumas t�cnicas
para otimiza-la mas nao obtive exito.
Mostrarei abaixo um exemplo :
TBL01
--------------
CO
COD_PRD
DCR_PRD
TBL02
--------------
CO
COD_PRD
COD_LOJA
PRECO_VENDA
obs: Os precos s�o diferenciados para as lojas
TBL03
--------------
CO
COD_PRD
COD_LOJA
COD_DET
QTD_ETQ
obs: CODDET = detalhe do produto (tamanho, Cor, etc.)
QTD_ETQ= quantidade de estoque do produto
Exemplo de Pesquisa:
SELECT
A.COD_PRD, DCR_PRD, B.COD_LJA, COD_DET, QTD_ETQ , PRECO_VENDA
FROM
TBL01 A,TBL02 B,TBL03 C
WHERE
DCR_PRD LIKE "SAPATO%" and
A.COD_PRD = B.COD_PRD AND
B.COD_PRD=C.CODPRD AND
B.CODLJA = C.CODLJA
resultado da pesquisa:
C�digo ; Descri��o ; Loja ; Detalhe ; Estoque ; Pre�o
---------------------------------------------------------------------------
----------------------
100 ; SAPATO SANDALO COURO ; 1 ; PRETO ; 10 ; R$ 70,00
100 ; SAPATO SANDALO COURO ; 2 ; PRETO ; 5 ; R$ 75,00
100 ; SAPATO SANDALO COURO ; 3 ; PRETO ; 0 ; R$ 80,00
100 ; SAPATO SANDALO COURO ; 1 ; MARROM ; 10 ; R$ 70,00
100 ; SAPATO SANDALO COURO ; 2 ; MARROM ; 5 ; R$ 75,00
100 ; SAPATO SANDALO COURO ; 3 ; MARROM ; 0 ; R$ 80,00
200 ; SAPATO SAMELO COURO ; 1 ; PRETO ; 7 ; R$ 50,00
200 ; SAPATO SAMELO COURO ; 2 ; PRETO ; 3 ; R$ 65,00
200 ; SAPATO SAMELO COURO ; 3 ; PRETO ; 2 ; R$ 70,00
200 ; SAPATO SAMELO COURO ; 1 ; BRANCO ; 7 ; R$ 50,00
200 ; SAPATO SAMELO COURO ; 2 ; BRANCO ; 3 ; R$ 65,00
200 ; SAPATO SAMELO COURO ; 3 ; BRANCO ; 2 ; R$ 70,00
.........
........
.......
O problema � o tempo da pesquisa (2 minutos) principalmente quando o numero
de lojas cresce(20 por exemplo).
A central de distribui��o precisa visualizar, ao mesmo tempo, o estoque do
produto em todas as lojas, quando a pesquisa
� feita pelo c�digo o tempo � aceit�vel mas pela descri��o � terrivel.
obs: a estrutura apresentada no exemplo � muito simples, deixando at� a
impress�o que a tbl02 n�o � necess�ria, mas outros campos � justificam.
O que eu poderia fazer para melhorar o tempo de pesquisa ?
Como eu poderia criar um �ndice adequado � pesquisa com essas tabelas ?
Agrade�o antecipadamente.
Reginaldo
|
Caros colegas,
estou com um problema de performance numa query.
Tentei algumas t�cnicas para otimiza-la mas nao obtive exito.
Mostrarei abaixo um exemplo :
TBL01
--------------
COD_PRD
DCR_PRD
TBL02
--------------
COD_PRD
COD_LOJA
PRECO_VENDA
obs: Os precos s�o diferenciados para as
lojas
TBL03
--------------
COD_PRD
COD_LOJA
COD_DET
QTD_ETQ
obs: CODDET = detalhe do produto (tamanho, Cor,
etc.)
QTD_ETQ= quantidade de estoque do produto
Exemplo de Pesquisa:
SELECT
A.COD_PRD, DCR_PRD,
B.COD_LJA, COD_DET, QTD_ETQ ,
PRECO_VENDA
FROM
TBL01 A,TBL02 B,TBL03
C
WHERE
DCR_PRD LIKE "SAPATO%"
and
A.COD_PRD = B.COD_PRD
AND
B.COD_PRD=C.CODPRD
AND
B.CODLJA = C.CODLJA
resultado da pesquisa:
C�digo ; Descri��o ; Loja ; Detalhe ; Estoque ;
Pre�o
-----------------------------------------------------------------------------------------------
100 ; SAPATO SANDALO COURO ; 2 ; PRETO
; 5 ; R$ 75,00
100 ; SAPATO SANDALO COURO ; 3 ;
PRETO ; 0 ; R$ 80,00
100 ; SAPATO SANDALO COURO ; 1 ; MARROM
; 10 ; R$ 70,00
100 ; SAPATO SANDALO COURO ; 2
; MARROM ; 5 ; R$ 75,00
100 ; SAPATO SANDALO COURO ; 3
; MARROM ; 0 ; R$
80,00 200 ; SAPATO SAMELO COURO ; 1 ; PRETO
; 7 ; R$ 50,00
200 ; SAPATO SAMELO COURO ; 2
; PRETO ; 3 ; R$ 65,00
200 ; SAPATO SAMELO COURO ;
3 ; PRETO ; 2 ; R$
70,00 200 ; SAPATO SAMELO COURO ; 1
; BRANCO ; 7 ; R$ 50,00
200 ; SAPATO SAMELO COURO ; 2
; BRANCO ; 3 ; R$ 65,00
200 ; SAPATO SAMELO COURO ;
3 ; BRANCO ; 2 ; R$
70,00 .........
........
.......
O problema � o tempo da pesquisa (2 minutos)
principalmente quando o numero de lojas cresce(20 por exemplo).
A central de distribui��o precisa visualizar, ao mesmo tempo, o estoque do produto em todas as
lojas, quando a pesquisa
� feita pelo c�digo o tempo � aceit�vel mas pela
descri��o � terrivel.
obs: a estrutura apresentada no exemplo � muito
simples, deixando at� a impress�o que a tbl02 n�o � necess�ria, mas outros campos � justificam.
O que eu poderia fazer para melhorar o tempo de
pesquisa ?
Como eu poderia criar um �ndice adequado � pesquisa
com essas tabelas ?
Agrade�o antecipadamente.
Reginaldo
|
