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):