Fórum Melhorar performance com índices no select? #412451
06/02/2012
0
SELECT CAST(SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5) AS VARCHAR(5)) AS CODIGO,
CAST(financeiro_contas.boleto_valor AS DOUBLE PRECISION) AS VALOR_SISTEMA,
CAST(tmp_obtemdadosexcel.valor AS DOUBLE PRECISION) AS VALOR_PLANILHA,
CAST(Valor Diferente AS VARCHAR(255)) AS STATUS
FROM financeiro_contas,tmp_obtemdadosexcel
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.contrato = Sim
AND tmp_obtemdadosexcel.codigo = SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5)
AND tmp_obtemdadosexcel.valor <> financeiro_contas.boleto_valor
UNION ALL
SELECT CAST(SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5) AS VARCHAR(5)) AS CODIGO,
CAST(financeiro_contas.boleto_valor AS DOUBLE PRECISION) AS VALOR_SISTEMA,
CAST(0 AS double PRECISION) AS VALOR_PLANILHA,
CAST(Não Existe na Planilha AS VARCHAR(255)) AS STATUS
FROM financeiro_contas
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.CONTRATO = Sim
AND SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5)
NOT IN (SELECT tmp_obtemdadosexcel.codigo
FROM tmp_obtemdadosexcel)
UNION ALL
SELECT CAST(tmp_obtemdadosexcel.codigo AS VARCHAR(5)) AS CODIGO,
CAST(0 AS double PRECISION) AS VALOR_SISTEMA,
CAST(tmp_obtemdadosexcel.valor AS DOUBLE PRECISION) AS VALOR_PLANILHA,
CAST(Não Existe no Sistema AS VARCHAR(255)) AS STATUS
FROM tmp_obtemdadosexcel
WHERE tmp_obtemdadosexcel.codigo NOT IN (SELECT SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5)
FROM financeiro_contas
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.contrato = Sim ) Numa tabela com muitos dados simplesmente trava.
Se alguém souber também uma maneira de melhorar este select pode ser também, o que eu não posso aqui é ficar com o sistema travado, mais creio que se conseguir indexar este select vou ganhar muito na performance.
Obrigado.
Adriano Dolce
Curtir tópico
+ 0Posts
06/02/2012
Adriano Dolce
Vou tentar de novo
SELECT CAST(SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5) AS VARCHAR(5)) AS CODIGO,
CAST(financeiro_contas.boleto_valor AS DOUBLE PRECISION) AS VALOR_SISTEMA,
CAST(tmp_obtemdadosexcel.valor AS DOUBLE PRECISION) AS VALOR_PLANILHA,
CAST(Valor Diferente AS VARCHAR(255)) AS STATUS
FROM financeiro_contas,tmp_obtemdadosexcel
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.contrato = Sim
AND tmp_obtemdadosexcel.codigo = SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5)
AND tmp_obtemdadosexcel.valor <> financeiro_contas.boleto_valor
UNION ALL
SELECT CAST(SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5) AS VARCHAR(5)) AS CODIGO,
CAST(financeiro_contas.boleto_valor AS DOUBLE PRECISION) AS VALOR_SISTEMA,
CAST(0 AS double PRECISION) AS VALOR_PLANILHA,
CAST(Não Existe na Planilha AS VARCHAR(255)) AS STATUS
FROM financeiro_contas
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.CONTRATO = Sim
AND SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5)
NOT IN (SELECT tmp_obtemdadosexcel.codigo
FROM tmp_obtemdadosexcel)
UNION ALL
SELECT CAST(tmp_obtemdadosexcel.codigo AS VARCHAR(5)) AS CODIGO,
CAST(0 AS double PRECISION) AS VALOR_SISTEMA,
CAST(tmp_obtemdadosexcel.valor AS DOUBLE PRECISION) AS VALOR_PLANILHA,
CAST(Não Existe no Sistema AS VARCHAR(255)) AS STATUS
FROM tmp_obtemdadosexcel
WHERE tmp_obtemdadosexcel.codigo NOT IN (SELECT SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5)
FROM financeiro_contas
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.contrato = Sim )Gostei + 0
06/02/2012
Adriano Dolce
SELECT CAST(SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5) AS VARCHAR(5)) AS CODIGO,
CAST(financeiro_contas.boleto_valor AS DOUBLE PRECISION) AS VALOR_SISTEMA,
CAST(tmp_obtemdadosexcel.valor AS DOUBLE PRECISION) AS VALOR_PLANILHA,
CAST(Valor Diferente AS VARCHAR(255)) AS STATUS
FROM financeiro_contas,tmp_obtemdadosexcel
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.contrato = Sim
AND tmp_obtemdadosexcel.codigo = SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5)
AND tmp_obtemdadosexcel.valor <> financeiro_contas.boleto_valor
UNION ALL
SELECT CAST(SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5) AS VARCHAR(5)) AS CODIGO,
CAST(financeiro_contas.boleto_valor AS DOUBLE PRECISION) AS VALOR_SISTEMA,
CAST(0 AS double PRECISION) AS VALOR_PLANILHA,
CAST(Não Existe na Planilha AS VARCHAR(255)) AS STATUS
FROM financeiro_contas
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.CONTRATO = Sim
AND SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5)
NOT IN (SELECT tmp_obtemdadosexcel.codigo
FROM tmp_obtemdadosexcel)
UNION ALL
SELECT CAST(tmp_obtemdadosexcel.codigo AS VARCHAR(5)) AS CODIGO,
CAST(0 AS double PRECISION) AS VALOR_SISTEMA,
CAST(tmp_obtemdadosexcel.valor AS DOUBLE PRECISION) AS VALOR_PLANILHA,
CAST(Não Existe no Sistema AS VARCHAR(255)) AS STATUS
FROM tmp_obtemdadosexcel
WHERE tmp_obtemdadosexcel.codigo NOT IN (SELECT SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5)
FROM financeiro_contas
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.contrato = Sim )
Gostei + 0
06/02/2012
Adriano Dolce
Primeiro crio uma tmp e insiro os dados da tabela financeiro pra dentro dela
insert into tmp_financeiro_contas (CODIGO, VALOR_SISTEMA)
SELECT SUBSTRING(financeiro_contas.boleto_seu_numero FROM 1 FOR 5),
financeiro_contas.boleto_valor
FROM financeiro_contas
WHERE financeiro_contas.BOLETO_STATUS = Em Aberto
AND financeiro_contas.BOLETO = Sim
AND financeiro_contas.CANCELADO <> Sim
AND financeiro_contas.BOLETO_MODALIDADE IN (Simples,Descontada)
AND financeiro_contas.contrato = Sim
Ai trabalho com a TMP no select
SELECT CAST(tmp_financeiro_contas.codigo AS VARCHAR(5)) AS CODIGO,
CAST(tmp_financeiro_contas.valor_sistema AS DOUBLE PRECISION) AS VALOR_SISTEMA,
CAST(tmp_obtemdadosexcel.valor AS DOUBLE PRECISION) AS VALOR_PLANILHA,
CAST(Valor Diferente AS VARCHAR(255)) AS STATUS
FROM tmp_financeiro_contas,tmp_obtemdadosexcel
WHERE tmp_obtemdadosexcel.codigo = tmp_financeiro_contas.codigo
AND tmp_obtemdadosexcel.valor <> tmp_financeiro_contas.valor_sistema
UNION ALL
SELECT CAST(tmp_financeiro_contas.codigo AS VARCHAR(5)) AS CODIGO,
CAST(tmp_financeiro_contas.valor_sistema AS DOUBLE PRECISION) AS VALOR_SISTEMA,
CAST(0 AS double PRECISION) AS VALOR_PLANILHA,
CAST(Não Existe na Planilha AS VARCHAR(255)) AS STATUS
FROM tmp_financeiro_contas
WHERE (tmp_financeiro_contas.codigo)
NOT IN (SELECT tmp_obtemdadosexcel.codigo
FROM tmp_obtemdadosexcel)
UNION ALL
SELECT CAST(tmp_obtemdadosexcel.codigo AS VARCHAR(5)) AS CODIGO,
CAST(0 AS double PRECISION) AS VALOR_SISTEMA,
CAST(tmp_obtemdadosexcel.valor AS DOUBLE PRECISION) AS VALOR_PLANILHA,
CAST(Não Existe no Sistema AS VARCHAR(255)) AS STATUS
FROM tmp_obtemdadosexcel
WHERE tmp_obtemdadosexcel.codigo NOT IN (SELECT tmp_financeiro_contas.codigo
FROM tmp_financeiro_contas )
Parece que ficou instantâneo
Gostei + 0
29/02/2012
Diego Lusa
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)