HAVING = BAD, WHERE = GOOD!
A cláusula WHERE é usada para filtrar linhas, enquando a cláusula HAVING é usada para filtrar grupos de linhas. O filtro de grupos é feito depois do agrupamento – e um agrupamento pode ser bem custoso para o banco. Por isso, sempre que possível, devemos primeiro filtrar as linhas usando um WHERE. Assim evitamos o tempo gasto para agrupar as linhas filtradas. Exemplos abaixo
Ruim (usando HAVING)
Bom (usando WHERE)
UNION = BAD, UNION ALL = GOOD!
Ao recuperar registros semelhantes de duas tabelas, UNION é usado para remover as linhas duplicadas – enquanto UNION ALL retorna todas as linhas, incluindo as duplicadas. Avalie a possibilidade de usar UNION ALL ao invés de UNION. Apesar de retornar mais linhas, é menos custoso, pois não tem o trabalho de remover as linhas duplicadas.
Ruim (usando UNION):
Bom (usando UNION ALL):