1. Otimizando Consulta com SQL
1. Procure NÃO utilizar o ‘*’ para retornar todos os campos, pois isso traz para a
estação cliente dados às vezes desnecessários.
A busca por todos atributos produz um trabalho adicional, já que será necessário
ler a página de dados de cada linha para obter os valores dos atributos que não
fazem parte do índice, caso o mesmo exista.
Exemplo:
SELECT * FROM TABELA1 - Procure não fazer isso e sim:
SELECT CAMPO1, CAMPO2 , CAMPO3 FROM TABELA1
2. Evite também instruções muito grandes. Procure quebrá-las em várias instruções
e ligue os resultados com o comando UNION.
3. Cuidado com os operadores lógicos AND na cláusula WHERE, pois para cada
AND a mais que é colocado, todo conjunto de dados que será retornado tem que
ser filtrado. Isto consome muito processamento, às vezes desnecessário.
4. Sempre que possível procure utilizar a cláusula TOP n para indicar qual a
quantidade de registro. Saber de antemão quantos registros a query tem que
retornar ajuda o SQL Server a fazer um plano de execução da instrução menor e
isso diminui o tempo de resposta. Por exemplo, se quisermos somente os 5
primeiros registros que atendem a uma condição:
SELECT TOP 5 CAMPO1 FROM TABELA1 WHERE CAMPO1 = 2
5. Não abuse muito do operador LIKE. Ele é ótimo para consultas, mas devemos
procurar não colocar % antes e depois.
- Se houver como, evite isto:
SELECT NOME FROM TABELA1 WHERE NOME LIKE ‘%A%’
6. Evite colocar muitos campos na cláusula ORDER BY, pois para cada campo
adicional, temos uma re-ordenação interna do conjunto de dados retornado.Por
exemplo:
SELECT CAMPO1, CAMPO2, CAMPO3 FROM TABELA1
ORDER BY CAMPO1 , CAMPO2 , CAMPO3
Analista de Sistemas/DESUN/DSNW/CIC - Eduardo Matias
2. Cláusula supracitada percebeu-se que ela representa um overhead adicional na
consulta, degradando o desempenho da mesma.
Procure usar quando possível:
SELECT CAMPO1, CAMPO2, CAMPO3 FROM TABELA1
ORDER BY CAMPO1
7. Ordem dos atributos do índice
Esta ordem deve ser observada, pois o índice só é útil se os critérios da consulta
correspondem aos atributos localizados mais à esquerda na chave de índice.
Um exemplo disso é uma lista telefônica, ou seja, ela está organizada em ordem
alfabética composta de sobrenome e nome. Para localizar um número
conhecendo-se o sobrenome basta seguir a ordem alfabética para encontrar o
número desejado. No caso de tentar localizar o número conhecendo-se apenas o
nome, será necessário percorrer a lista, pois o nome poderá estar em qualquer
página da lista.
8. Quando for usar JOINS, procure sempre manter a tabela que possui mais
registro à esquerda da comparação.
9. Na cláusula WHERE, liste primeiramente, as condições mais restritivas. As
condições mais restritivas geram um menor número de linhas de dados.
10. Limite a quantidade de colunas incluídas em uma cláusula GROUP BY.
11. Cláusula DISTINCT
A cláusula DISTINCT provoca um overhead adicional na consulta,
conseqüentemente degrada o desempenho da mesma. Por isso, deve-se utilizá-la
com extremo cuidado, apenas em casos onde realmente seja necessário.
12. Cláusula HAVING deve ser evitada, pois acredita-se que a mesma provoca um
overhead adicional, aumentando o tempo de execução da pesquisa.
13. Join X Subconsulta
Se puder escolher entre a utilização de uma JOIN ou de uma subconsulta, é
interessante testar os dois métodos, pois o desempenho de cada um desses
métodos pode variar para determinada consulta.
Analista de Sistemas/DESUN/DSNW/CIC - Eduardo Matias
3. 14. Cláusula Not In X Cláusulas Not Exists / Left Outer Join
A utilização da cláusula NOT IN numa consulta acarreta um loop aninhado,
resultando em um baixo desempenho da consulta. Por isso, deve-se utilizar em
seu lugar uma das seguintes cláusulas: NOT EXISTS ou LEFT OUTER JOIN
checando a condição NULL.
Obs: Estas diretrizes não devem ser consideradas inquestionáveis.
Experimente, execute teste, enfim, cheque você mesmo às conclusões que se
referem à otimização do funcionamento dos procedimentos.
Analista de Sistemas/DESUN/DSNW/CIC - Eduardo Matias