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:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”U1FMPiBTRUxFQ1QgZmlyc3RfbmFtZSwgbGFzdF9uYW1lLCBkZXBhcnRtZW50X25hbWUKICAyICBGUk9NIGVtcGxveWVlcywgZGVwYXJ0bWVudHMKICAzICBXSEVSRSBlbXBsb3llZXMuZGVwYXJ0bWVudF9pZD1kZXBhcnRtZW50cy5kZXBhcnRtZW50X2lkOw==” hover_enabled=”0″]U1FMPiBTRUxFQ1QgZmlyc3RfbmFtZSwgbGFzdF9uYW1lLCBkZXBhcnRtZW50X25hbWUKICAyICBGUk9NIGVtcGxveWVlcywgZGVwYXJ0bWVudHMKICAzICBXSEVSRSBlbXBsb3llZXMuZGVwYXJ0bWVudF9pZD1kZXBhcnRtZW50cy5kZXBhcnRtZW50X2lkOw==[/et_pb_dmb_code_snippet]

Correto:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”U1FMPiBTRUxFQ1QgZS5maXJzdF9uYW1lLCBlLmxhc3RfbmFtZSwgZC5kZXBhcnRtZW50X25hbWUKICAyICBGUk9NIGVtcGxveWVlcyBlLCBkZXBhcnRtZW50cyBkCiAgMyAgV0hFUkUgZS5kZXBhcnRtZW50X2lkPWQuZGVwYXJ0bWVudF9pZDs=” hover_enabled=”0″]U1FMPiBTRUxFQ1QgZS5maXJzdF9uYW1lLCBlLmxhc3RfbmFtZSwgZC5kZXBhcnRtZW50X25hbWUKICAyICBGUk9NIGVtcGxveWVlcyBlLCBkZXBhcnRtZW50cyBkCiAgMyAgV0hFUkUgZS5kZXBhcnRtZW50X2lkPWQuZGVwYXJ0bWVudF9pZDs=[/et_pb_dmb_code_snippet]

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

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”U1FMPiBTRUxFQ1QgY291bnQoMSkKICAyICBGUk9NIGVtcGxveWVlcwogIDMgIFdIRVJFIHNhbGFyeSA8IDMwMDA7CgogIENPVU5UKDEpCi0tLS0tLS0tLS0KICAgICAgICAyNAoKU1FMPiBTRUxFQ1QgY291bnQoMSkKICAyICBGUk9NIGVtcGxveWVlcwogIDMgIFdIRVJFIHNhbGFyeSBCRVRXRUVOIDMwMDAgQU5EIDgwMDA7CgogIENPVU5UKDEpCi0tLS0tLS0tLS0KICAgICAgICA1MAoKU1FMPiBTRUxFQ1QgY291bnQoMSkKICAyICBGUk9NIGVtcGxveWVlcwogIDMgIFdIRVJFIHNhbGFyeSA+IDgwMDA7CgogIENPVU5UKDEpCi0tLS0tLS0tLS0KICAgICAgICAzMw==” hover_enabled=”0″]U1FMPiBTRUxFQ1QgY291bnQoMSkKICAyICBGUk9NIGVtcGxveWVlcwogIDMgIFdIRVJFIHNhbGFyeSA8IDMwMDA7CgogIENPVU5UKDEpCi0tLS0tLS0tLS0KICAgICAgICAyNAoKU1FMPiBTRUxFQ1QgY291bnQoMSkKICAyICBGUk9NIGVtcGxveWVlcwogIDMgIFdIRVJFIHNhbGFyeSBCRVRXRUVOIDMwMDAgQU5EIDgwMDA7CgogIENPVU5UKDEpCi0tLS0tLS0tLS0KICAgICAgICA1MAoKU1FMPiBTRUxFQ1QgY291bnQoMSkKICAyICBGUk9NIGVtcGxveWVlcwogIDMgIFdIRVJFIHNhbGFyeSA+IDgwMDA7CgogIENPVU5UKDEpCi0tLS0tLS0tLS0KICAgICAgICAzMw==[/et_pb_dmb_code_snippet]

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

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”U1FMPiBTRUxFQ1QKICAyICBDT1VOVChDQVNFIFdIRU4gc2FsYXJ5IDwgMzAwMCBUSEVOIDEgRUxTRSBudWxsIEVORCkgYmFpeG9zLAogIDMgIENPVU5UKENBU0UgV0hFTiBzYWxhcnkgQkVUV0VFTiAzMDAwIEFORCA4MDAwIFRIRU4gMSBFTFNFIG51bGwgRU5EKSBtZWRpb3MsCiAgNCAgQ09VTlQoQ0FTRSBXSEVOIHNhbGFyeSA+IDgwMDAgVEhFTiAxIEVMU0UgbnVsbCBFTkQpIGFsdG9zCiAgNSAgRlJPTSBlbXBsb3llZXM7CgogICAgQkFJWE9TICAgICBNRURJT1MgICAgICBBTFRPUwotLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLS0tLQogICAgICAgIDI0ICAgICAgICAgNTAgICAgICAgICAzMw==” hover_enabled=”0″]U1FMPiBTRUxFQ1QKICAyICBDT1VOVChDQVNFIFdIRU4gc2FsYXJ5IDwgMzAwMCBUSEVOIDEgRUxTRSBudWxsIEVORCkgYmFpeG9zLAogIDMgIENPVU5UKENBU0UgV0hFTiBzYWxhcnkgQkVUV0VFTiAzMDAwIEFORCA4MDAwIFRIRU4gMSBFTFNFIG51bGwgRU5EKSBtZWRpb3MsCiAgNCAgQ09VTlQoQ0FTRSBXSEVOIHNhbGFyeSA+IDgwMDAgVEhFTiAxIEVMU0UgbnVsbCBFTkQpIGFsdG9zCiAgNSAgRlJPTSBlbXBsb3llZXM7CgogICAgQkFJWE9TICAgICBNRURJT1MgICAgICBBTFRPUwotLS0tLS0tLS0tIC0tLS0tLS0tLS0gLS0tLS0tLS0tLQogICAgICAgIDI0ICAgICAgICAgNTAgICAgICAgICAzMw==[/et_pb_dmb_code_snippet]

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.