Pavel to má docela správně, jen bych to rád trochu vysvětlil.
Za předpokladu, že máte na mysli dopad na výkon ve srovnání s pohyblivou řádovou čárkou nebo celým číslem s pevným posunem (tj. uložením tisícin centu jako celého čísla):Ano, má to velký vliv na výkon. PostgreSQL a podle zvuků MySQL ukládejte DECIMAL
/ NUMERIC
v binárním kódu v desítkové soustavě. Tento formát je kompaktnější než ukládání číslic jako text, ale stále s ním není příliš efektivní pracovat.
Pokud v databázi neprovádíte mnoho výpočtů, dopad je omezen na větší úložný prostor požadovaný pro BCD ve srovnání s celým číslem nebo s pohyblivou řádovou čárkou, a tedy na širší řádky a pomalejší skenování, větší indexy atd. Operace porovnávání v b -Prohledávání indexů stromů je také pomalejší, ale ne natolik, aby záleželo, pokud již nejste vázáni na CPU z nějakého jiného důvodu.
Pokud provádíte mnoho výpočtů s DECIMAL
/ NUMERIC
hodnoty v databázi, pak může výkon skutečně trpět. To je zvláště patrné, alespoň v PostgreSQL, protože Pg nemůže použít více než jeden CPU pro jakýkoli daný dotaz. Pokud děláte obrovské množství dělení a násobení, složitější matematiky, agregace atd. na numerických číslech, můžete začít zjišťovat, že jste vázáni na CPU v situacích, kde byste nikdy nebyli, když používáte datový typ float nebo integer. To je zvláště patrné u pracovních zátěží podobných OLAP (analytika) a při vytváření sestav nebo transformace dat během načítání nebo extrakce (ETL).
Nehledě na to, že existuje dopad na výkon (který se liší v závislosti na pracovní zátěži od zanedbatelného až po poměrně velký), měli byste obecně používat numeric
/ decimal
když je to nejvhodnější typ pro váš úkol – tj. když je třeba uložit hodnoty velmi vysokého rozsahu a/nebo když je chyba zaokrouhlení nepřijatelná.
Občas se vyplatí použít velký offset s pevným bodem, ale to je neohrabané a neflexibilní. Místo toho je použití plovoucí desetinné čárky velmi zřídka správnou odpovědí kvůli všem problémům spojeným se spolehlivou prací s hodnotami s pohyblivou řádovou čárkou pro věci, jako je měna.
(BTW, jsem docela nadšený, že některé nové procesory Intel a řada procesorů IBM Power 7 zahrnují hardwarovou podporu pro IEEE 754 s desetinnou desetinnou čárkou. Pokud to někdy bude dostupné pro procesory nižší třídy, bude to pro databáze obrovská výhra. .)