Uma alternativa aos cursores

by Israel Aece 24. June 2009 12:39

Uma funcionalidade que existe no SQL Server é a capacidade de iterar pelos resultados de uma consulta através de cursores. Não sou especialista em SQL Server, mas sei que a sua utilização degrada consideravelmente a performance. Talvez se utilizá-lo em uma quantidade pequena de informações, ele pode executar bem, mas não sei ao o impacto que isso causa, devido aos recursos do sistema que ele utiliza para fazer funcionar.

Como havia a necessidade de melhorar o resultado de um relatório extremamente complexo, e as alternativas em T-SQL já estavam esgotadas, a solução foi recriar a Stored Procedure utilizando o .NET. Sustituimos os cursores por SqlDataReaders, e a diferença foi bastante significativa. E ainda nem precisei abrir mão da segurança, já que o Assembly com a Stored Procedure gerenciada, foi catalogado com o nível de segurança definido como Safe.

Tags: , ,

Data

Comments

6/24/2009 4:04:58 PM #

Raphael Silva

Caraca!
O SqlDataReader faz milagre éh?

Abs;

Raphael Silva Brazil

6/24/2009 5:18:33 PM #

IsraelAece

Boas Raphael,

Ao utilizar uma linguagem genuína, como o C#/VB.NET, você tem bem mais flexibilidade do que utilizar uma linguagem de banco.

Em alguns cenários, pode não ser a melhor saída. Neste caso, mesmo com todo o overhead de ter uma SP gerenciada, o ganho foi muito alto.

IsraelAece Brazil

6/24/2009 9:38:45 PM #

Melqui Pinho

O problema é que nem sempre isto é possível (Alguns DBA's surtariam só de ouvir falar nisto).

Daí só resta apelar para as "alternativas", o Nilton Pinheiro fala sobre isto em www.mcdbabrasil.com.br/modules.php  

Abraço,

Melqui Pinho Brazil

7/2/2009 2:22:32 PM #

Cassiano Kuss

E tabelas temporárias na SP, não ficaria mais rápido?

Abraços!

Cassiano Kuss Brazil

7/4/2009 9:35:24 AM #

IsraelAece

Boas Cassiano,

Ela já estava fazendo uso de tabelas temporárias. Foot

IsraelAece Brazil

8/13/2009 10:37:28 AM #

Rodrigo Petrella

Opa Israel, vira e mexe estou utilizando seus posts como referência para estudo.
Com relação aos cursores realmente não não para usar e em alguns ambientes os DBAs simplesmente proibem hehehe O que costumo utilizar é criar não uma tabela temporária mas sim uma variável do tipo TABLE e aí sim fazer um WHILE nos registros desta variável. Grande abraço !!

Rodrigo Petrella Brazil

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading



Powered by BlogEngine.NET 1.5.0.0
Theme by Mads Kristensen

Sobre

Meu nome é Israel Aece e sou especialista em tecnologias de desenvolvimento Microsoft, atuando como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. [ Mais ]

Twitter

Host