Por uma dessas view abre rápido e a outra demora tanto?
Minha necessidade: preciso criar uma view, como na opção 2 abaixo. Ela funciona só que demora uma eternidade para abrir a query cuja instrução SQL é ´SELECT PRODUTO, SUM(ENTRADAS), SUM(SAIDAS) FROM VIEWMOVIESTOQUE2 GROUP BY PRODUTO´. Mas, se eu fizer a mesma instrução, usando a opção/view 1 ´´SELECT PRODUTO, SUM(ENTRADAS), SUM(SAIDAS) FROM VIEWMOVIESTOQUE GROUP BY PRODUTO´ não demora nada.
O que poderia ser que demora tanto? Como poderia fazer para carregar a descrição do produto sem que demore tanto?
Uso BD Firebird
Obrigado.
CRIAÇÃO DE VIEW - OPÇÃO 1
CREATE VIEW VIEWMOVIESTOQUE(PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS
SELECT PRODUTO, DATA, OPERACAO,
CAST (0 AS NUMERIC (18,3))AS ENTRADAS,
CAST(QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS
FROM MOVIESTOQUE WHERE OPERACAO = ´E´
UNION ALL
SELECT PRODUTO, DATA, OPERACAO,
CAST(QUANTIDADE AS NUMERIC (18,3))AS SAIDAS,
CAST(0 AS NUMERIC(18,3)) AS ENTRADAS
FROM MOVIESTOQUE WHERE OPERACAO = ´S´
CRIAÇÃO DE VIEW - OPÇÃO 2
CREATE VIEW VIEWMOVIESTOQUE2 (DESCRICAO, PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS
SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO,
CAST (0 AS NUMERIC (18,3))AS ENTRADAS,
CAST(QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS
FROM MOVIESTOQUE MOV, PRODUTOS PROD WHERE OPERACAO = ´E´
UNION ALL
SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO,
CAST(QUANTIDADE AS NUMERIC (18,3))AS SAIDAS,
CAST(0 AS NUMERIC(18,3)) AS ENTRADAS
FROM MOVIESTOQUE MOV, PRODUTOS PROD WHERE MOV.OPERACAO = ´S´
O que poderia ser que demora tanto? Como poderia fazer para carregar a descrição do produto sem que demore tanto?
Uso BD Firebird
Obrigado.
CRIAÇÃO DE VIEW - OPÇÃO 1
CREATE VIEW VIEWMOVIESTOQUE(PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS
SELECT PRODUTO, DATA, OPERACAO,
CAST (0 AS NUMERIC (18,3))AS ENTRADAS,
CAST(QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS
FROM MOVIESTOQUE WHERE OPERACAO = ´E´
UNION ALL
SELECT PRODUTO, DATA, OPERACAO,
CAST(QUANTIDADE AS NUMERIC (18,3))AS SAIDAS,
CAST(0 AS NUMERIC(18,3)) AS ENTRADAS
FROM MOVIESTOQUE WHERE OPERACAO = ´S´
CRIAÇÃO DE VIEW - OPÇÃO 2
CREATE VIEW VIEWMOVIESTOQUE2 (DESCRICAO, PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS
SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO,
CAST (0 AS NUMERIC (18,3))AS ENTRADAS,
CAST(QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS
FROM MOVIESTOQUE MOV, PRODUTOS PROD WHERE OPERACAO = ´E´
UNION ALL
SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO,
CAST(QUANTIDADE AS NUMERIC (18,3))AS SAIDAS,
CAST(0 AS NUMERIC(18,3)) AS ENTRADAS
FROM MOVIESTOQUE MOV, PRODUTOS PROD WHERE MOV.OPERACAO = ´S´
Valdirdill
Curtidas 0
Respostas
Afarias
25/03/2004
O problema na Opção 2 é q vc tem 2 tabelas (MOVIMENTOS E PRODUTOS) e não estabeleceu uma relação entre elas (JOIN)
T+
T+
GOSTEI 0
Valdirdill
25/03/2004
Você poderia me ajudar a fazer isso, ou seja, estabelecer esse join? Como ficaria a segunda instrução?
Obrigado
Obrigado
O problema na Opção 2 é q vc tem 2 tabelas (MOVIMENTOS E PRODUTOS) e não estabeleceu uma relação entre elas (JOIN)
T+
GOSTEI 0
Afarias
25/03/2004
CREATE VIEW VIEWMOVIESTOQUE2 (DESCRICAO, PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO, CAST (0 AS NUMERIC (18,3)) AS ENTRADAS, CAST(MOV.QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS FROM MOVIESTOQUE MOV INNER JOIN PRODUTOS PROD ON (PROD.CODIGO=MOV.PRODUTO) WHERE MOV.OPERACAO = ´E´ UNION ALL SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO, CAST(MOV.QUANTIDADE AS NUMERIC (18,3))AS SAIDAS, CAST(0 AS NUMERIC(18,3)) AS ENTRADAS FROM MOVIESTOQUE MOV INNER JOIN PRODUTOS PROD ON (PROD.CODIGO=MOV.PRODUTO) WHERE MOV.OPERACAO = ´S´
T+
GOSTEI 0
Valdirdill
25/03/2004
Value Afarias. Funcionou que é um brinco.
Obrigadíssimo.
T+
Obrigadíssimo.
CREATE VIEW VIEWMOVIESTOQUE2 (DESCRICAO, PRODUTO, DATA, OPERACAO, ENTRADAS, SAIDAS) AS SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO, CAST (0 AS NUMERIC (18,3)) AS ENTRADAS, CAST(MOV.QUANTIDADE AS NUMERIC(18,3)) AS SAIDAS FROM MOVIESTOQUE MOV INNER JOIN PRODUTOS PROD ON (PROD.CODIGO=MOV.PRODUTO) WHERE MOV.OPERACAO = ´E´ UNION ALL SELECT PROD.DESCRICAO, MOV.PRODUTO, MOV.DATA, MOV.OPERACAO, CAST(MOV.QUANTIDADE AS NUMERIC (18,3))AS SAIDAS, CAST(0 AS NUMERIC(18,3)) AS ENTRADAS FROM MOVIESTOQUE MOV INNER JOIN PRODUTOS PROD ON (PROD.CODIGO=MOV.PRODUTO) WHERE MOV.OPERACAO = ´S´
GOSTEI 0