Use referências de colunas totalmente qualificadas

Se a sua query faz pelo menos um JOIN – e sabemos que na prática isso acontece em pelo menos 90% das querys de um sistema OLTP, inclua alias (apelidos) de tabelas e utilize o apelido em cada uma das colunas. assim o banco de dados não precisará procurar em todas as tabelas envolvidas cada coluna utilizada em sua consulta.

Este é um tipo de prática que não agrada muitos desenvolvedores – afinal, se o resultado é o mesmo, eles preferem o jeito mais simples e fácil, ou seja, escrever menos.

Vamos para dois exemplos – o certo e o errado – para demonstração.

Errado:

SQL> SELECT first_name, last_name, department_name
  2  FROM employees, departments
  3  WHERE employees.department_id=departments.department_id;

Correto:

SQL> SELECT e.first_name, e.last_name, d.department_name
  2  FROM employees e, departments d
  3  WHERE e.department_id=d.department_id;

Reforçando a idéia: este método ajuda na performance do banco de dados, pois você já especificou quais tabelas são as “donas” de cada coluna. Caso contrário, o banco de dados precisa consultar o dicionário de dados para conferir todas as colunas de todas as tabelas envolvidas. No exemplo acima são apenas duas, mas lembre-se que frequentemente vemos SELECT com JOIN’s entre muito mais tabelas.

Use expressões CASE em vez de várias consultas

Quando precisar efetuar muitos cálculos nas mesmas linhas de uma tabela, evite executar várias consultas: tente trocá-las por uma consulta única, usando CASE. Vamos direto para a parte prática, mostrando o antes (ruim) e o depois (bom).

Versão “ruim” – 3 consultas separadas

SQL> SELECT count(1)
  2  FROM employees
  3  WHERE salary < 3000;

  COUNT(1)
----------
        24

SQL> SELECT count(1)
  2  FROM employees
  3  WHERE salary BETWEEN 3000 AND 8000;

  COUNT(1)
----------
        50

SQL> SELECT count(1)
  2  FROM employees
  3  WHERE salary > 8000;

  COUNT(1)
----------
        33

Agora a versão “boa” – uma única consulta com CASE, trazendo os mesmos resultados

SQL> SELECT
  2  COUNT(CASE WHEN salary < 3000 THEN 1 ELSE null END) baixos,
  3  COUNT(CASE WHEN salary BETWEEN 3000 AND 8000 THEN 1 ELSE null END) medios,
  4  COUNT(CASE WHEN salary > 8000 THEN 1 ELSE null END) altos
  5  FROM employees;

    BAIXOS     MEDIOS      ALTOS
---------- ---------- ----------
        24         50         33

Usei este exemplo bem simples, mas claro que é possível usufruir de outros tipos de intervalos e funções diferentes nas expressões CASE.

A intenção não é simplesmente “trocar 3 consultas por 1” para diminuir o código: devemos nos preocupar com Performance constantemente. Imagine um sistema em que essas 3 consultas são executadas 800 mil vezes ao dia. A execução de uma consulta ao invés de 3 traria uma melhoria muito considerável no consumo de recursos do banco de dados.