Dicas para uma boa performance em códigos T-SQL

Boa dia amigos, veremos dicas importantes de como melhorar o desempenho de um banco, que é algo importantíssimo.

Melhorar a performance nos bancos de dados é sempre algo desejado. Na hora de fazer isso, surgem várias dúvidas de como fazer da melhor forma. Talvez uma das perguntas mais comuns em fóruns seja como melhorar a performance de uma consulta que está muito lenta. Situação que traz uma resposta totalmente aberta: depende! E depende mesmo, de vários fatores. A lista a seguir traz apenas 10 dicas que podem fazer a diferença em seus scripts T-SQL. Espero que ela o ajude a encontrar uma boa solução, mesmo sabendo que os fatores que causam perda de performance precisam ser analisados antes de qualquer ação. Bom proveito!

01. No comando SELECT, utilize apenas o número de colunas que seja necessário

Deve-se evitar a utilização do * para o retorno da consulta. Tudo porque ao utilizar o * em sua consulta, o SQL consulta a tabela syscolumns para retornar todas as colunas e agregar a seu comando o resultado.

Exemplo:

SELECT cNome, dNascimento, lAtivo
FROM tbPessoaFisica

02. Não declare variáveis que você não utilizará ou reaproveite variáveis existentes.

Este procedimento aumenta sua banda de cache, deixando assim, uma margem extra de cache para outros processos.

03. Utilize CONVERT apenas para conversão de dados do tipo DATETIME

Para as demais conversões de tipos, utilize CAST, pois CAST faz parte do padrão ANSI-92 e CONVERT funciona apenas para o SQL Server, sendo que em versões futuras este comando corre o risco de ser cortado do Transact.

Exemplo:

SELECT
CAST(GETDATE() AS VARCHAR(20)) AS dCast,
CONVERT(VARCHAR(20), GETDATE(), 100) AS dConvert

04. Utilize SELECT ao invés de SET

Com apenas um SELECT você pode definir valores para uma ou mais variáveis, enquanto para o comando SET você precisaria de vários comandos. Sendo assim, a utilização do comando SELECT para atribuição de valores a variáveis fica bem mais rápida.

Exemplo:

DECLARE @id AS INT, @nome AS VARCHAR(25), @nascimento AS DATETIME
-- EX de atribuição de valores utilizando SET
SET @id = 10
SET @nome = 'Rodrigo'
SET @nascimento = '1984-02-29'
-- EX de atribuição de valores utilizando SELECT
SELECT @id = 10, @nome = 'Rodrigo', @nascimento = '1984-02-29'

05. Cuidado com ORDER BY e DISTINCT

Use apenas se necessário. A utilização destes comandos pode gerar sobrecarga no engine do SQL Server, causando a lentidão no processo ou em processos simultâneos.

06. Utilize as palavras reservadas do transact em letras maiúsculas para se diferenciar das demais.

Esta dica não influencia no quesito performance do script, mas ajuda a encontrar possíveis erros de sintaxe logo na escrita. Isto pode aumentar sua produtividade.

Exemplo:

--SEM ERRO
SELECT cNome, dNascimento, lAtivo FROM tbPessoaFisica
WHERE idPessoaFisica = 10
GO
--COM ERRO
SEELCT cNome, dNascimento, lAtivo FROM tbPessoaFisica
WHERE idPessoaFisica = 10;

07. SELECT * INTO funciona muito bem para com pequenas tabelas

Mas, ao lidar com grande número de registro ou longo processo de consulta, pode causar bloqueios em objetos da base tempDB, ocasionando filas para outros processos que utilizam a tempDB. Isto ocorre porque, ao criar um objeto, é causado um lock exclusivo nas tabelas sysobjects e syscolunms. Então, utilize este recurso com cuidado!

08. Utilize variáveis de tabela ao invés de tabelas temporárias

Tabelas temporárias podem causar recompilações em algumas procedures. Variáveis de tabelas foram criadas para solucionar este problema de recompilações em procedures que necessitam de objetos temporários.

09. Clausula WHERE

Os diversos operadores, usados diretamente, afetam no tempo de resposta de suas consultas. Para conhecer melhor sua proficiência, você pode ler o artigo disponibilizado pela Microsoft em http://msdn.microsoft.com/en-us/library/ms190276.aspx

10. Utilize a procedure sp_executesql

A utilização da sp_executesql evita recompilações de procedures. Mas, lembre-se, recompilações nem sempre são ruins. Para maior informação sobre recompilações e cache de planos de execução, leia o artigo do TechNet http://technet.microsoft.com/en-us/library/cc966425.aspx

 Exemplo:

EXECUTE sp_executesqlN'SELECT cNome, dNascimento, lAtivo FROM tbPessoaFisica
WHERE idPessoaFisica = @idPessoaFisica', N'@idPessoaFisica INT', @idPessoaFisica =
10

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s