sql >> Databáze >  >> RDS >> PostgreSQL

Dochází k zásahu do výkonu pomocí desítkových datových typů (MySQL / Postgres)

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



  1. Vyhledávání ve výrazových indexech

  2. Jak programově generovat DDL z databáze Oracle?

  3. Upgradujte MySQL na MariaDB 10 (část 1 – Instalace MariaDB 5.5)

  4. 3 způsoby, jak převést celé číslo na desítkové v SQL Server