Category: SQL

Cuidado com casts em campos char/nchar/varchar/nvarchar

Há erros que nunca cometemos. Por exemplo, um overflow num int que nos faz pensar por que raio é que a coluna não foi logo definida como bigint. Ou um destes casos que quero mostrar agora. Porque nunca acontecem. Sabemos que se tentarmos ultrapassar certos limites, o SQL Server nos avisa. Ou este Mas há outros… Vamos correr de novo para vermos os tamanhos reais em bytes...

Quando um erro dentro de um TRY não corre o código dentro do CATCH

Conversa interessante com um colega de profissão, estamos a discutir um caso em que anda um bug à solta e de repente digo-lhe: “Mas nem sempre um TRY/CATCH funciona como estás à espera, por vezes há erro dentro do código no TRY e não salta para o CATCH”. Sim, há quem não acredite. Mas acontece. E até está bem documentado. Vamos ver um desses casos para dissiparmos...

Adicionar um índice para ajudar nos updates e deletes pode não ajudar, revisitado.

Há poucos dias fiz um post sobre como nem sempre um índice ajuda em updates e deletes. Para situar quem não o leu, mostrei que um índice que à primeira vista pode ajudar nem sempre o faz. Por vezes até se revela desastroso em termos de performance. Mas como há sempre quem diga que “não cobriste todos os casos, se tivesses __________ seria diferente”. E ainda bem...

O tamanho dos varchar interessa, mesmo que o SQL Server só use o espaço que necessita, revisitado.

O meu post de há algum tempo sobre o tamanho das variáveis e o memory grant deu algo que falar, por isso resolvi, ao estilo de Hollywood destes últimos anos, revisitá-lo. Se se lembram desse post (também não foi há assim tanto tempo…) a questão era: O tamanho das variaveis não interessa, se eu colocar um varchar(max) ou varchar(50) é igual porque o SQL Server só usa...

A quantidade de colunas num select importa, e muito

E se, de repente, ouvirem uma coisa destas? A quantidade de colunas não importa num select, não estou a agregar nem ordenar a saída. Pois, e eu já acreditei no Pai Natal, mas já foi há algum tempo. Vamos criar umas tabelas para testar esta ideia? Podemos agora correr este pedacinho de código? Nada de estranho se passa, como esperado. Mas no fundo o que queríamos era...

Adicionar um índice para ajudar nos updates e deletes pode não ajudar

Com o tempo vêm-se coisas muito giras e assunções muito elaboradas. Já me ouviram dizer que a Assunção é a mãe de todas as trapalhadas? Temos um “delete que demora muito tempo”. Normalmente é um delete “à bruta”, todo feito de uma vez em que vemos o nosso log a crescer até ao infinito e mais além. Ou temos um update a uma certa coluna e resolvemos...

Cuidados a ter para ajudar na eliminação de joins em SQL Server

Há uns dias coloquei aqui um post sobre eliminação de joins e, sem querer, deparei-me hoje com uma situação onde parecia que o SQL Server não estava a fazer um bom trabalho. Vai-se a ver… e quem não estava a fazer um bom trabalho éramos nós. A situação era bem mais complicada do que esta, mas se pegarmos no código do último post é rápida de explicar....

Eliminar joins à moda do SQL Server

Há alguns dias em conversa com um colega referi o termo “join elimination” e ele ficou um pouco surpreendido. Importa referir que a especialidade dele não é SQL e que é fenomenal em coisas que eu pouco entendo também. A famosa máxima “todos somos ignorantes, apenas em coisas diferentes”. Vamos ver uma das maneiras mais simples de join elimination que o SQL Server trata com muito carinho....

Mais coisas onde uma check constraint ajuda muita gente

Como já devem ter percebido adoro ajudar os meus amigos, neste caso o meu grande amigo query optimizer do SQL Server. Vamos lá analisar mais uma maneira de o ajudar? Um caso com que me deparo algumas vezes é o facto de nós sabermos algumas coisas sobre os nossos dados que ainda não explicámos bem ao SQL Server. Por exemplo, temos uma coluna numa tabela em que...

O tamanho dos varchar interessa, mesmo que o SQL Server só use o espaço que necessita

Esta situação vem “à berlinda” de vez em quando. A última vez onde vi esta questão aparecer foi num evento de profissionais de Data Platform. O tamanho das variaveis não interessa, se eu colocar um varchar(max) ou varchar(50) é igual porque o SQL Server só usa o espaço que necessita. Saltamos directamente para a parte interessante, a demo. Criamos uma tabela e inserimos algumas linhas Temos então...