sábado, 17 de outubro de 2009

INSERT em bloco de transação

Geek que é geek se fascina com essas coisas. Estou eu neste sábado *desesperado* estudando para o curso de SQL Server que vou começar a dar na segunda. Olhando o capítulo sobre execução de consultas no Inside SQL Server 2005: Query Tunning and Optimization, o cara (não foi a Delaney que escreveu esse capítulo - ela agora está "sub-contratando" autores pra série Inside...) me solta essa sem nem um comentariozinho sobre o código:

O cara tá fazendo uma sequência de 250.000 INSERT´s. Pra otimizar, ele abre uma transação antes do laço, e a cada 1.000 INSERT's dá um COMMIT e abre outra transação. Isso evita que seja feita uma transação pra cada comando INSERT executado. (Sim, Gafanhoto. Quando você não faz BEGIN TRAN, o SQL Server abre automaticamente uma transação pros comandos executados fora de uma transação. Isso permite, p.e., que você se arrependa e dê um ROLLBACK dentro de um trigger, mesmo sem aparentemente haver uma transação aberta).

Usando esse bloco de transações, ele roda os INSERT's em 250 transações, em vez de 250 mil transações. Lindo. Simplesmente lindo.

E acho que não precisa nem dizer, mas sim: sou geek. :-)