Boas Práticas

  • jamais utilizar "*" para em uma query em aplicação: selecionar apenas os campos absolutamente necessários para evitar a manipulação de dados desnecessários;
  • não utilizar funções sobre colunas: isso obriga o banco a aplicar a função a cada dado, se fosse sobre o valor buscado seria feito somente uma vez;
 
notion image
  • evitar cálculos na where sobre colunas indexadas: o cálculo deve ser realizado sobre o parâmetro buscado;
  • evitar utilizar operadores non-SARG's (Search Arguments): operadores de negação (NOT, <>, ...) e comparação com NULL (is null, is not null) forçam um SCAN sobre o índice ou tabela, perdendo toda a vantagem de se ter um índice;
  • minimizar o número de lookups (acessos) nas tabelas: procure minimizar a quantidade de acessos que uma query executa em tabelas;
  • evite reutilizar views: muitas vezes as views retornam informações desnecessárias para consulta atual;
  • remover acessos desnecessários: algumas vezes as queries consultam uma tabela que não possui nenhum dado referenciado nas colunas requisitadas;
  • utilizar o operador exists em subqueries que retornam valores não-únicos: caso a subconsulta retorne valores repetidos o operador exists é mais eficiente que o in ; já que com valores repetidos o in iria iterar por todos elementos mesmo que repetidos;
  • não utilizar count() dentro de subqueries do exists: a função count() sempre retorna um valor, assim o exists retornaria true para todos registros;
  • utilizar tipo de dados corretos nos filtros: os bancos de dados fazem conversões implícitas em comparações de dados de tipos diferentes; eles sempre convertem o que for texto para número, se uma coluna for texto e o valor comparado for número, todos valores da coluna serão convertidos para número;
  • evitar o uso do distinct: prefirir o uso do exists;
notion image
  • evitar o uso de campos NVARCHAR : campos NVARCHAR utilizam dois bytes para armazenar cada caractere; usar somente quando o sistema aceita caracteres de línguas asiáticas, pois esses demandam 2 bytes por caractere;
  • utilizar sequences para aplicações com muitas inserções simultâneas: com sequences é possível criar caches de chaves primárias para utilização posterior; a abordagem de entity para gerar chaves primárias pode causar um travamento no banco quando um conjunto grande de inserções é feito ao mesmo tempo, isso pode ser evitado com o uso do cache das sequences;