Usuário com melhor resposta
Melhorar Performance de Pocedure

Pergunta
-
Senhores, Bom Dia!!
Como posso melhorar a performance Procedure abaixo? Pois o resultado está demorando muito tempo para ser retornado. Segue Script que contempla a Proc p/ analise. Obrigado, Abraços
CAST(b.clienteID AS VARCHAR(50)) + '.' + CONVERT(VARCHAR(10),b.dtLiberadoIDS, 112) + '.' + CAST(b.concluidoID AS VARCHAR(10)) AS PreLote
,b.clienteid
,b.np
,b.vlnegociado
,GETDATE() AS DATA
,nfsubcontratado
,filialid
,dtLiberadoIDS
,concluidoID
,liberadoids
into #tempOS
FROM dbo.visios b (NOLOCK)
WHERE b.concluido = 0
AND b.cancelado = 0
DELETE from #tempOS
where liberadoids = 0
SELECT
CAST(b.clienteID AS VARCHAR(50)) + '.' + CONVERT(VARCHAR(10),b.dtLiberadoIDS, 112) + '.' + CAST(b.concluidoID AS VARCHAR(10)) AS PreLote
,b.clienteid
,e.empresa
,b.np
,a.nfsubcontratado
,b.vlnegociado
,d.vlfranquia
,vlnegociado
,ValorLiquido = (b.vlnegociado - d.vlfranquia - d.VlFranquiaCompl)
,GETDATE()
from #tempOS b
LEFT JOIN dbo.tbsiNotasfiliados a (NOLOCK) ON a.nfreferente = b.nfsubcontratado AND a.clienteID = b.clienteID
LEFT JOIN dbo.tbsiPedidoseg d (NOLOCK) ON b.np = d.np AND b.filialid = D.FilialID
LEFT JOIN TBSIAFILIADOSSIMPLES e (NOLOCK) ON e.clienteid = b.clienteID
drop table #tempOS
Respostas
-
Liandro,
Porquê você esta utilizando tabela temporária?
Outro detalhe você esta utilzando o NoLock, já avaliou se realmente é necessário?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 14:22
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 20:09
-
Liandro,
Concordo com o Pedro, o I/O gerado pela manipulação de tabelas temporárias deve estar aumentando muito o processamento de sua instância SQL e, consequentemente, levando mais tempo para retornar os dados.
Sugiro que você substitua à tabela temporária por consultas utilizando CTE.
Para mais informações veja:
http://msdn.microsoft.com/pt-br/library/ms175972.aspx
http://technet.microsoft.com/pt-br/library/ms190766(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 14:22
Todas as Respostas
-
-
Boa tarde,
Acredito que a tabela temporária não é necessária. Experimente dessa forma:
SELECT CAST(b.clienteID AS VARCHAR(50)) + '.' + CONVERT(VARCHAR(10),b.dtLiberadoIDS, 112) + '.' + CAST(b.concluidoID AS VARCHAR(10)) AS PreLote ,b.clienteid ,e.empresa ,b.np ,a.nfsubcontratado ,b.vlnegociado ,d.vlfranquia ,vlnegociado ,ValorLiquido = (b.vlnegociado - d.vlfranquia - d.VlFranquiaCompl) ,GETDATE() from dbo.visios b LEFT JOIN dbo.tbsiNotasfiliados a ON a.nfreferente = b.nfsubcontratado AND a.clienteID = b.clienteID LEFT JOIN dbo.tbsiPedidoseg d ON b.np = d.np AND b.filialid = D.FilialID LEFT JOIN TBSIAFILIADOSSIMPLES e ON e.clienteid = b.clienteID WHERE b.concluido = 0 AND b.cancelado = 0 AND b.liberadoids <> 0
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
Liandro,
Porquê você esta utilizando tabela temporária?
Outro detalhe você esta utilzando o NoLock, já avaliou se realmente é necessário?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
- Sugerido como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 14:22
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 20:09
-
Liandro,
Concordo com o Pedro, o I/O gerado pela manipulação de tabelas temporárias deve estar aumentando muito o processamento de sua instância SQL e, consequentemente, levando mais tempo para retornar os dados.
Sugiro que você substitua à tabela temporária por consultas utilizando CTE.
Para mais informações veja:
http://msdn.microsoft.com/pt-br/library/ms175972.aspx
http://technet.microsoft.com/pt-br/library/ms190766(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 11 de agosto de 2014 14:22