PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 20/04/2011 12:21:01

GloReX
Membre

Optimisation table: double ou numeric

Bonjour,

J'ai deux tables contenant des valeurs numérique et des dates. Ces tables on une croissance importante (plusieurs dizaine de millier de tuples par jour sur 29 colonnes).
Je souhaiterai avoir votre avis sur les types à utiliser pour stocker ces valeurs, dois-je plutôt utiliser le type double ou numeric(x,y), afin d'optimiser la table en terme de taille et de performance.

Merci

Hors ligne

#2 20/04/2011 13:22:09

Marc Cousin
Membre

Re : Optimisation table: double ou numeric

Ça dépend de ce que vous voulez en faire.

Double est le plus souvent plus compact, et plus rapide pour les calculs.

Mais numeric permet de faire des calculs exacts, ce que ne permet pas real (erreurs d'arrondis, c'est une notation mantisse + exposant).


Marc.

Hors ligne

#3 20/04/2011 13:47:59

GloReX
Membre

Re : Optimisation table: double ou numeric

Il y a plusieurs choses:
- Affichage des données sous forme de graphique
- Affichage des données sous forme de tableau Excel
- Petit calcul de type addition, moyenne...
- Statistique basique

Le valeur numérique des capteurs ne sont pas très grande mais il y en a beaucoup. Dans la majeur partie des cas, elles comportent une partie entière de 5 entiers et 3 décimale.

Dernière modification par GloReX (20/04/2011 13:51:11)

Hors ligne

#4 20/04/2011 13:49:40

Marc Cousin
Membre

Re : Optimisation table: double ou numeric

La réponse est la même: ça dépend de si vous avez besoin de calculs exacts, ou si les erreurs d'arrondi sont acceptables. Pour du financier par exemple, il est hors de question d'utiliser les types real et double.


Marc.

Hors ligne

#5 20/04/2011 14:09:22

GloReX
Membre

Re : Optimisation table: double ou numeric

Les calculs ne doivent pas être exact.
En terme de performance, si j'ai bien compris votre réponse, le double est préférable.

Dernière modification par GloReX (20/04/2011 14:10:39)

Hors ligne

#6 20/04/2011 14:17:25

Marc Cousin
Membre

Re : Optimisation table: double ou numeric

Oui. Le double utilise les opérations du processeur (via la librairie C). Alors que numeric, afin d'être exact, doit effectuer bien plus d'opérations.


Marc.

Hors ligne

#7 20/04/2011 14:45:10

GloReX
Membre

Re : Optimisation table: double ou numeric

Et bien merci, j'allais faire une connerie...

Hors ligne

#8 20/04/2011 14:46:56

Marc Cousin
Membre

Re : Optimisation table: double ou numeric

Ça aurait pas été une très grosse connerie. C'est plus simple de passer de numeric à real quand on s'est trompé que dans l'autre sens: on ne perd pas de données avec numeric.


Marc.

Hors ligne

#9 20/04/2011 15:05:07

GloReX
Membre

Re : Optimisation table: double ou numeric

Du coup je vais me retrouver avec des valeurs ressemblant a 145,12499999999. Est-il donc possible de "limiter" la précision ?

Dernière modification par GloReX (20/04/2011 15:05:31)

Hors ligne

#10 20/04/2011 15:08:43

Marc Cousin
Membre

Re : Optimisation table: double ou numeric

Dans la table ? Non.

À l'affichage, bien sûr, il suffit d'utiliser les fonctions d'arrondi : http://docs.postgresql.fr/9.0/functions-math.html


Marc.

Hors ligne

#11 20/04/2011 16:02:45

SQLpro
Membre

Re : Optimisation table: double ou numeric

Marc Cousin a écrit :

Dans la table ? Non.

Bien sur que si... Cela fait partie de la norme SQL que PG respecte assez bien !!!

Démo :

CREATE TABLE TRE (C1 NUMERIC(16,2));

INSERT INTO TRE VALUES (1), (1.23), (1234567.89), (1.23456789);

SELECT * FROM TRE;

Et la réponse :

1.00
1.23
1234567.89
1.23

A +


Frédéric Brouard, alias SQLpro,  ARCHITECTE DE DONNÉES,  Expert langage SQL
Le site sur les SGBD relationnel et langage SQL   : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA, ISEN Toulon,  CESI Aix en Provence  * * * * *

Hors ligne

#12 20/04/2011 17:03:00

gleu
Administrateur

Re : Optimisation table: double ou numeric

GloReX et Marc parlaient du type real, pas du type numeric.


Guillaume.

Hors ligne

#13 09/05/2011 11:58:48

GloReX
Membre

Re : Optimisation table: double ou numeric

ok,

Encore une petite question concernant la définition d'un type numérique.

La définition d'une colonne au format float(p) est-elle juste une implémentation destinée a la conformité au langage SQL ou la précision p est-elle réellement appliquée,
car il me semble avoir lu dans la doc que float(p) pour p [1-24] est transformé en real.
Donc écrire float(9) reviendrait au même que d'écrire float(6) transformé en real ayant une précision de 6.

Est-ce exact ?

Merci à tous

Hors ligne

#14 09/05/2011 13:52:06

Marc Cousin
Membre

Re : Optimisation table: double ou numeric

marc=# CREATE TABLE test (a float(6));
CREATE TABLE
marc=# CREATE TABLE test2 (a float(40));
CREATE TABLE
marc=# \d test
    Table "public.test"
Column | Type | Modifiers
--------+------+-----------
a      | real |

marc=# \d test2
         Table "public.test2"
Column |       Type       | Modifiers
--------+------------------+-----------
a      | double precision |

Ils sont donc convertis en real et double…

Attention, la précision est en bit de la mantisse, pas en nombre décimaux.


Marc.

Hors ligne

Pied de page des forums