Pular para o conteúdo principal

Postagens

Mostrando postagens de Julho, 2015

Treinamento para consultas com SQL Server - Parte 10 (Final) - Introdução a índices e otimização

Um banco de dados com alto desempenho em todas as consultas é como a ciência de construir foguetes: difícil, inexata e cada caso merece uma atenção especial. Por isso neste tópico não é possível colocar o assunto em pauta, uma vez que demandaria um tempo muito grande. Por isso, serão tratados alguns casos que penalizam as consultas por não utilizarem corretamente a indexação do banco e que devem ser evitados ou mitigados sempre que forem encontrados.No final, colocarei uma dica sobre como construir índices eficientes no SQL Server, porque, infelizmente, não basta que eles existam, tem de ser criados do jeito certo.Alerta sobre desempenhoA preocupação com o desempenho das consultas deve estar embutida no design do banco de dados. É muito mais difícil otimizar um banco com milhões de registros com gargalos de desempenho e vários usuários conectados o tempo todo. Verifique a previsão de crescimento do banco ao realizar seu projeto. (Ou peça que seu líder de projeto faça isso).LikeEsta in…

Treinamento para consultas com SQL Server - Parte 9 - Medidas de Segurança Iniciais

O trabalho com bancos de dados muitas vezes será feito em ambiente de produção, embora se recomende que isso seja evitado ao máximo.Com isto aumenta significativamente o risco de se executar alguma consulta de atualização dos dados que cause problemas. Um DELETE ou UPDATE sem WHERE, por exemplo, já é o suficiente para tirar o sono do desenvolvedor durante muito tempo.Alguns bancos de dados mais antigos e portanto, há mais tempo no mercado, como o ORACLE, exigem em todas as suas ferramentas de DML que o COMMIT seja sempre explícito, ou seja, para as modificações tanto dos dados como da estrutura de tabelas serem persistidas a instrução deve conter esta instrução, caso contrário, os resultados estarão pendentes até fechar a sessão e no momento em que isso é feito, um ROLLBACK é executado automaticamente.O SQL Server ainda não possui este recurso. Toda e qualquer consulta executada está no modo AUTO COMMIT. Assim, para evitar problemas causados por este tipo de configuração, este documen…

Treinamento para consultas com SQL Server - Parte 8 - FOR XML

Este recurso – que existe de outras formas em diversos bancos de dados, permite que os resultados de uma consulta sejam recuperados no formato XML. Além disso, dependendo das configurações dos parâmetros, é possível fazer uma espécie de pivoteamento transformando as linhas e colunas da consulta em uma única string, usando delimitadores para colunas e linhas.Outro aspecto importante é que, através de FOR XML, os dados podem ser transformados para que sejam compartilhados com aplicações diversas.O ponto principal para conseguir este resultado é transformar o retorno com a função PATH() no final da instrução. Para obter o resultado desejado, basta passar uma string vazia como parâmetro.Considere a consulta do exemplo anterior onde cada PERSON tinha um resumo com a soma das vendas dos anos 2005-2007 sendo exibidas em cada coluna. Vamos transformar esta consulta para que para cada nome seja retornada um texto onde os registros estão separados por ponto e vírgula “;” e as colunas por “|”.A …

Treinamento para consultas com SQL Server - Parte 7 - Sub Consultas (SUBQUERIES)

Este é um recurso muito útil na linguagem SQL permitindo colocar o resultado de consultas inteiras em uma coluna fazendo parte das linhas de uma consulta maior. Uma consulta pode ter quantas sub consultas forem necessárias, mas, existem alguns pontos de atenção:O resultado da sub consulta deve ser sempre escalar, ou seja, um valor único, nunca um conjunto de linhas e colunas (rowset). Pode ser necessário usar a cláusula TOP em alguns casos.Para evitar problemas, a sub consulta deve estar amarrada com alguma coluna da consulta principal.Verificar os índices das tabelas envolvidas se estão apropriados. As sub consultas têm um custo muito alto de processamento e afetam em muito o desempenho caso sejam muito complexas.Para exemplificar vamos considerar as tabelas PERSON.PERSON, SALES.SALESORDERHEADER – armazena informações sobre vendas e SALES.CUSTOMER – Clientes para o qual a venda foi feita. O diagrama de relacionamentos pode ser conferido a seguir. O objetivo é ter o resultado da somató…

Treinamento para consultas com SQL Server - Parte 6 - CASE

Em linguagens de programação como o C e C# este conjunto de instruções serve para testar vários valores de uma mesma variável e executar um bloco específico de instruções.Na Linguagem SQL, CASE é usado para testar o valor de uma expressão e retornar um valor escalar conforme o resultado obtido. Este tipo é útil principalmente quando códigos que detém a regra de negócios são armazenados no banco e não possuem tabelas relacionadas.Sua sintaxe básica segue o padrão demonstrado a seguir: CASE <expressão> WHEN <valor1> THEN <Retorno1> WHEN &lt.valor2> THEN <Retorno2> … WHEN <valorn> THEN <retornon> -- ELSE é OPCIONAL ELSE <Retorno alternativo> END Podem existir quantos WHEN forem necessários, mas, o valor a ser testado precisa ser escalar, ou seja, um valor simples, não pode ser uma expressão ou um rowset. Na tabela PERSON.PERSON existe a coluna PersonType que armazena o tipo de pessoa que os dados representam. Esta coluna não possui…