Category: SQL

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...

Vistas sobre tabelas com índices clustered sobre colunas nullable trazem surpresas

Há uns dias atrás andava pela minha vidinha a avaliar a performance de uma SP que estava a desenvolver e deparei-me com uma situação pouco usual. Não tenho uma maneira fácil de explicar o que estava a acontecer sem mostrar onde me estava a meter. Vamos lá explicar isto pondo já as mãos na massa. Vou criar uma tabela base e copiá-la para 4 tabelas que vão...

SHRINK ao Log antes do processamento não é uma boa ideia

Há uns dias deparei-me com um script que, no início de um processamento grande, fazia SHRINK aos ficheiros de Log das BD’s com que trabalhava. Como é meu apanágio, quando disse que “não era uma boa ideia” também disse que “qualquer dia faço uma demo para isso”. Pensei eu que iria ser uma “entradazinha” no blog e vai-se a ver acabou nisto. tl;dr Não é uma boa...

Uma constraint ajuda muita gente, mas será que um índice ajuda muito mais?

Há uns dias, em conversa com colegas sobre o meu post em que recomendava o uso de constraints, surgiu uma pergunta pertinente: “Então não bastava termos usado uns índices e o assunto ficaria resolvido?” A minha resposta foi “Não. Mas não te fies na minha resposta, testa e vê com os teus próprios olhos, ou melhor ainda, com o teu management studio.”   Vamos lá revisitar o código do...

NOLOCK não respeita nenhuma ordem

Engana-me que eu gosto! O título é um pouco desafiador, mas vamos lá explicar isto timtim por timtim. Quem me conhece sabe que não morro de amores pelo NOLOCK. Realmente, acho que é uma das “marteladas” muitas vezes evitável. Há tanto para dizer deste hint… muito já foi dito, basta procurarem por “SQL Server nolock” no vosso motor de busca preferido que encontram muita informação. O que...

Será que um rebuild da tabela actualiza as estatísticas?

Há uns dias surgiu uma questão bem pertinente no seio da minha equipa: “No fim do processo quero fazer rebuild à tabela, isso actualiza todas as estatísticas também?” Resposta… aquela famosa “resposta do informático”: Depende. Resposta do outro lado? Depende do quê? Resposta: De muita coisa. Bem, nada como vermos com os nosso olhos. Vamos lá mostrar do que depende. Como base, para os menos versados no...

Uma constraint ajuda muita gente, duas constraints ajudam muito mais

Deparo-me com esta questão algumas vezes, por isso acho que é daquelas que merece uma entrada aqui. Já criei esta demo há algum tempo para mostrar a um colega de trabalho o que acontece quando ajudamos o query optimizer, dizendo-lhe algumas coisas que nós já sabemos sobre os nossos dados. Neste caso concreto, “particionar” tabelas manualmente, mas sem colocar nenhuma check constraint serve para… pouco. 🙂 Sim,...