Você está na página 1de 3

Otimizando Consulta com SQL

1. Procure NO utilizar o * para retornar todos os campos, pois isso traz para a estao cliente dados s vezes desnecessrios. A busca por todos atributos produz um trabalho adicional, j que ser necessrio ler a pgina de dados de cada linha para obter os valores dos atributos que no fazem parte do ndice, caso o mesmo exista. Exemplo: SELECT * FROM TABELA1 - Procure no fazer isso e sim: SELECT CAMPO1, CAMPO2 , CAMPO3 FROM TABELA1

2. Evite tambm instrues muito grandes. Procure quebr-las em vrias instrues e ligue os resultados com o comando UNION. 3. Cuidado com os operadores lgicos AND na clusula 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 desnecessrio. 4. Sempre que possvel procure utilizar a clusula TOP n para indicar qual a quantidade de registro. Saber de antemo quantos registros a query tem que retornar ajuda o SQL Server a fazer um plano de execuo da instruo menor e isso diminui o tempo de resposta. Por exemplo, se quisermos somente os 5 primeiros registros que atendem a uma condio: SELECT TOP 5 CAMPO1 FROM TABELA1 WHERE CAMPO1 = 2 5. No abuse muito do operador LIKE. Ele timo para consultas, mas devemos procurar no colocar % antes e depois. - Se houver como, evite isto: SELECT NOME FROM TABELA1 WHERE NOME LIKE %A%

6. Evite colocar muitos campos na clusula ORDER BY, pois para cada campo adicional, temos uma re-ordenao 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

Clusula supracitada percebeu-se que ela representa um overhead adicional na consulta, degradando o desempenho da mesma. Procure usar quando possvel: 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 critrios da consulta correspondem aos atributos localizados mais esquerda na chave de ndice. Um exemplo disso uma lista telefnica, ou seja, ela est organizada em ordem alfabtica composta de sobrenome e nome. Para localizar um nmero conhecendo-se o sobrenome basta seguir a ordem alfabtica para encontrar o nmero desejado. No caso de tentar localizar o nmero conhecendo-se apenas o nome, ser necessrio percorrer a lista, pois o nome poder estar em qualquer pgina da lista. 8. Quando for usar JOINS, procure sempre manter a tabela que possui mais registro esquerda da comparao. 9. Na clusula WHERE, liste primeiramente, as condies mais restritivas. As condies mais restritivas geram um menor nmero de linhas de dados. 10. Limite a quantidade de colunas includas em uma clusula GROUP BY. 11. Clusula DISTINCT A clusula DISTINCT provoca um overhead adicional na consulta, conseqentemente degrada o desempenho da mesma. Por isso, deve-se utiliz-la com extremo cuidado, apenas em casos onde realmente seja necessrio. 12. Clusula HAVING deve ser evitada, pois acredita-se que a mesma provoca um overhead adicional, aumentando o tempo de execuo da pesquisa. 13. Join X Subconsulta Se puder escolher entre a utilizao de uma JOIN ou de uma subconsulta , interessante testar os dois mtodos, pois o desempenho de cada um desses mtodos pode variar para determinada consulta.

Analista de Sistemas/DESUN/DSNW/CIC - Eduardo Matias

14. Clusula Not In X Clusulas Not Exists / Left Outer Join A utilizao da clusula 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 clusulas: NOT EXISTS ou LEFT OUTER JOIN checando a condio NULL. Obs: Estas diretrizes no devem ser consideradas inquestionveis. Experimente, execute teste, enfim, cheque voc mesmo s concluses que se referem otimizao do funcionamento dos procedimentos.

Analista de Sistemas/DESUN/DSNW/CIC - Eduardo Matias

Você também pode gostar