Fa uns dies que a la feina m'he dedicat a revisar sentències d'una sèrie de funcions que tinc compilades en un package d'Oracle.
Les funcions funcionen correctament i fan el que toca però no n'hi ha prou que les coses funcionin bé, també cal fer-ho de forma óptima, reduïnt el cost de cada sentència al mínim possible.
Aixíq ue he volgut fer un petit recopilatori de normés BÀSIQUES de bones pràctiques de SQL per Oracle:
– Mostrar tots els usuaris que cobren 25.000 euros anuals a partir d'un camp que ens diu quin es el sou mensual:
Malament:
Select Nom From Usuaris Where Sou_menusal*12=25000
Bé:
Select Nom From Usuaris Where Sou_mensual=25000/12
Nota: Si apliques alguna funció sobre el camp que vols filtrar impossibilites que la base de dades pugi utilitzar un possible índex. Aixpò també inclou males pràctiques com fer UPPER(camp), etc.
– Suposem que tenim un camp que pot pendre els valors 0 i 1 i volem filtrar segons el que marca:
Malament:
Select Nom From Usuaris Where Check<>1
Bé:
Select Nom From Usuaris Where Check=0
Nota: Les desigualtats no utilitzen els índexs, les igualtats sí! Per tant utilitzar sempre una igualtat abans que una desigualtat.
– Volem ajuntar els registres de dues sentències diferents i no tenim duplicats:
Malament:
Select Nom From Usuaris1 Union Select Nom From Usuaris2
Bé:
Select Nom From Usuaris1 Union all Select Nom From Usuaris2
Nota: El Union torna totes les files diferents, el union all totes les fileres. per tant si no hi ha duplicats el union all te un millor rendiment.