Den bedste praksis er at altid start med 3NF, og overvej kun denormalisering, hvis du finder et specifikt præstationsproblem.
Ydeevnen er kun én af de problemer, du skal forholde dig til med databaser. Ved at duplikere data risikerer du at tillade inkonsistente data at være i din database, og dermed annullere et af kerneprincipperne for relationelle databaser, konsistens (C
i ACID
).
Ja, sammenføjninger har en omkostning, det er der ingen udenom. Men omkostningerne er normalt meget mindre, end du skulle tro, og kan ofte oversvømmes af andre faktorer som netværksoverførselstider. Ved at sikre, at de relevante kolonner er indekseret korrekt, kan du undgå mange af disse omkostninger.
Og husk optimeringsmantraet:mål, gæt ikke! Og mål i et produktionslignende miljø. Og behold måling (og tuning) med jævne mellemrum - optimering er kun et sæt og glem operation, hvis dit skema og data aldrig ændres (meget usandsynligt).
Reversion for ydeevne kan normalt gøres sikkert ved at bruge triggere til at opretholde konsistens. Dette vil selvfølgelig bremse dine opdateringer, men kan stadig lade dine valg køre hurtigere.