Você está na página 1de 2

Banco de Dados - Boas Práticas

1. Em instruções select, evite usar “*”. Seja restritivo, traga somente os campos realmente
necessários.

2. Otimize a clausula WHERE: Simples exemplos são o uso de “>” e “>=”. Se você quer
retornar todas as pessoas de uma tabela que tem idade “> 3”, use no where “>=4”, dessa
forma o banco não fará o scan das páginas até encontrar o 3.

3. Procure utilizar na clausula where todos (ou a maioria) dos campos chave ou que são
indexados. Mesmo que não tenha um valor, procure estabelecer um intervalo e utiliza-lo.
Por exemplo: A data de um pedido será obrigatoriamente maior que a data do cadastro do
cliente e menor que a data atual.

4. Use sempre o tipo de dados correto para armazenar os dados. Por exemplo, não armazene
sexo (M ou F) em um campo Varchar, use apenas 1 caractere: CHAR(1).
5. Evite utilizar o operador “LIKE”
6. Utilize EXISTS ao invés de COUNT para verificar se existe um determinado registro em uma
tabela. É comum fazer um “select count(X) from Y” para verificar se o COUNT é maior que 0.
Utilizando-se EXISTS, o SGDB vai parar no primeiro registro encontrado, se utilizar count, o
banco vai varrer toda a tabela.

7. Em joins de tipos de dados diferentes, o SGBD vai ter que converter o tipo para o outro
tipo a fim de efetuar a comparação, converta-lo para o mesmo tipo ao efetuar a query.
Por exemplo, se o atributo codigo_cliente da tabela Cliente for Numeric(10) e o mesmo
atributo da tabela PEDIDO for Numeric(5), converta-o para o mesmo tipo ao efetuar o join.

8. Substituir as clausulas "or" por um novo select com o "UNION".

Exemplo:
Select id_cliente from cliente Where tipo = J OR (idade > 30 and tipo = F)

Alterar para:
Select id_cliente from cliente Where tipo = J
UNION
Select id_cliente from cliente Where idade > 30 and tipo = F

9. Evite grandes operações de classificação envolvendo ORDER BY, GROUP BY e HAVING.


Subconjunto de dados são armazenados na memória ou em disco sempre que operações de
classificação são realizadas.

Se a ordem de classificação for à mesma que a da chave primária não há necessidade de usar
ORDER BY.

10. Evitar o uso do DISTINCT. Implementando de outra forma, o DISTINCT pode ser
substituído pelo EXISTS.
11. Ao realizar uma SQL, evite utilizar aspas ('') em registros que são inteiros. Ao utilizar
essas aspas, o SGBD converterá os caracteres de char para inteiro.
Ex: SELECT codigo FROM tbteste WHERE idade = ‘20’

12. O uso de índices deverá ser cuidadosamente estudado. Um índice mal elaborado pode
impactar na performance de uma consulta já existente na sua aplicação!

Utilize índices apenas em colunas que são freqüentemente usados na clausula WHERE; Não
indexe colunas que são freqüentemente modificadas; Use índices apenas em colunas que
possuem uma baixa porcentagem de linhas com valores iguais.

13. Evite utilizar grandes blocos transacionais (BeginTran ... Commit/Rollback). Procure
utilizar loops por registro ou trabalhar em pequenas quantidades de registros por blocos.

14. Evite a técnica do “curto-circuito” (Ex: ...Where @x=0 OR codigo=@X). Procure executar
no banco a instrução já montada.

Utilize:
SE @x > 0
Select nome from cliente WHERE codigo = @X
SENÂO
Select nome from cliente

Você também pode gostar