PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Y a-t-il un impact sur les performances en utilisant des types de données décimaux (MySQL / Postgres)

Pavel a tout à fait raison, j'aimerais juste expliquer un peu.

En supposant que vous vouliez dire un impact sur les performances par rapport à la virgule flottante ou à l'entier à décalage à virgule fixe (c'est-à-dire stocker des millièmes de cent sous forme d'entier):Oui, il y a beaucoup d'impact sur les performances. PostgreSQL, et par le son des choses MySQL, stockez DECIMAL / NUMERIC en décimal codé en binaire. Ce format est plus compact que le stockage des chiffres sous forme de texte, mais il n'est toujours pas très efficace de travailler avec.

Si vous n'effectuez pas beaucoup de calculs dans la base de données, l'impact est limité à l'espace de stockage plus important requis pour BCD par rapport à l'entier ou à la virgule flottante, et donc aux lignes plus larges et aux balayages plus lents, aux index plus grands, etc. Opérations de comparaison dans b -les recherches d'index d'arborescence sont également plus lentes, mais pas assez pour avoir de l'importance, sauf si vous êtes déjà lié au processeur pour une autre raison.

Si vous faites beaucoup de calculs avec le DECIMAL / NUMERIC valeurs dans la base de données, les performances peuvent vraiment en souffrir. Ceci est particulièrement visible, du moins dans PostgreSQL, car Pg ne peut pas utiliser plus d'un processeur pour une requête donnée. Si vous effectuez un grand nombre de divisions et de multiplications, de mathématiques plus complexes, d'agrégation, etc. sur des nombres, vous pouvez commencer à vous retrouver lié au processeur dans des situations où vous ne seriez jamais en utilisant un type de données flottant ou entier. Cela est particulièrement visible dans les charges de travail de type OLAP (analytiques) et dans les rapports ou la transformation des données lors du chargement ou de l'extraction (ETL).

Malgré le fait qu'il existe un impact sur les performances (qui varie en fonction de la charge de travail de négligeable à assez important), vous devez généralement utiliser numeric / decimal lorsqu'il s'agit du type le plus approprié pour votre tâche - c'est-à-dire lorsque des valeurs très élevées doivent être stockées et/ou qu'une erreur d'arrondi n'est pas acceptable.

Parfois, cela vaut la peine d'utiliser un décalage en bigint et en virgule fixe, mais c'est maladroit et inflexible. Utiliser la virgule flottante à la place est très rarement la bonne réponse en raison de tous les défis liés au travail fiable avec des valeurs en virgule flottante pour des choses comme la monnaie.

(BTW, je suis très heureux que certains nouveaux processeurs Intel et la gamme de processeurs Power 7 d'IBM incluent la prise en charge matérielle de la virgule flottante décimale IEEE 754. Si cela devient disponible dans les processeurs bas de gamme, ce sera une énorme victoire pour les bases de données .)