Histórico da Página
...
Boas práticas e dicas para construção de uma consulta sql:
Expandir | ||
---|---|---|
| ||
Ao escrever uma cláusula WHERE, sempre colocar a cláusula mais restritiva antes. Qual é a condição mais restritiva? A condição na cláusula WHERE de uma instrução que retorna o menor número de linhas de dados. Exemplo: SELECT COUNT(1) from ppessoa where (sexo = 'M') -- 348260 linhas SELECT COUNT(1) from ppessoa WHERE (GRAUINSTRUCAO = '5') -- 966 linhas Sendo assim: select * from ppessoa where (GRAUINSTRUCAO = '5') AND (sexo = 'M') --certo select * from ppessoa where (sexo = 'M') and (GRAUINSTRUCAO = '5') --errado Obs.: Na maioria das vezes durante a análise do plano de execução o próprio sgbd* faz essa troca internamente para aprimorar sua própria busca, contudo essa ação gera custos para ele o ideal é não deixar essa tarefa para ele e garantir o melhor resultado de sua consulta. |
Expandir | ||
---|---|---|
| ||
Evitar cláusulas WHERE que utilizam colunas não indexadas ou solicitar a criação do índice para a equipe de banco de dados. É muito importante avaliar quais colunas da tabela serão apresentadas no resultado bem como quais colunas participam da cláusula WHERE, caso tais colunas estejam dentro de um índice ‘não clusterizado’, será o caminho mais performático para sua consulta. Exemplo: Na tabela em questão temos um índice ‘nonclustered’ com as colunas chapa, anocomp, mescomp, nroperiodo e codevento. Ao montar a consulta podemos ver que imediatamente o banco de dados decidiu usá-lo para determinar a execução da consulta:
Veja o plano de execução estimado entre as duas consultas, a diferença entre a estimativa simplesmente por ter modificado as colunas a serem retornadas: Obs.: Caso exista colunas na cláusula select ou na where que não estejam neste índice, será necessário usar o índice da chave primária, não sendo tão performático. Ou seja, sempre dê preferência para colunas associadas aos índices ‘não clusterizados’. |
Expandir | ||
---|---|---|
| ||
Não esquecer de colocar (NOLOCK) nas sentenças (exceto quando se aplica exceção) Exemplo: SELECT CHAPA, ANOCOMP, MESCOMP, NROPERIODO, CODEVENTO FROMPFFINANC (NOLOCK) WHERE CODEVENTO = ‘abcd’ Obs.: Caso exista alguma atualização sendo executada para o CODEVENTO = ‘abcd’ em outra tela’, sua consulta não precisa aguardar a conclusão dessa atualização para que assim apresente os valores pedidos. O uso desse recurso só não poderá ser útil se para a sua consulta, seja expressamente necessário ter o valor mais atualizado da tabela, neste caso terá que aguardar a atualização ser concluída para depois receber tais informações. Esta abordagem não se aplica em Oracle, pois ele não permite “leitura suja”, ele possui outra abordagem para nível de isolamento. |
- No SELECT, trazer apenas as colunas necessárias;
...