Bonjour,
j'aurais souhaité savoir s'il était préférable d'un point de vu performance et espace disque de définir la taille d'un NUMBER d'une colonne (ex: NUMBER(5,2) au lieu de NUMBER).
Bonjour,
j'aurais souhaité savoir s'il était préférable d'un point de vu performance et espace disque de définir la taille d'un NUMBER d'une colonne (ex: NUMBER(5,2) au lieu de NUMBER).
je ne crois pas que ça fasse de différence... c'est juste une contrainte sur la colonne![]()
Mais n'y a-t-il pas une taille par défaut pour NUMBER ? J'ai lu qq part que c'était 38, ce qui le cas échéant peut être préjudiciable en espace pour une table de plusieurs millions de lignes, par rapport à NUMBER(5,2) qui doit faire 5 octets.
C'est pas préjudiciable puisque ça ne prendra la place que de ce que tu y insères![]()
Pour le même nombre, style "1", la taille physique sera la même quelque soit la taille logique (la contrainte) du nombre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 select cast(column_value as number(5,2)) "NUMBER(5,2)", vsize(cast(column_value as number(5,2))) "VSIZE(NUMBER(5,2))", cast(column_value as number) "NUMBER", vsize(cast(column_value as number)) "VSIZE(NUMBER)" from table(sys.odcinumberlist(1,1.2345)) NUMBER(5,2) VSIZE(NUMBER(5,2)) NUMBER VSIZE(NUMBER) ----------- ------------------ ---------- ------------- 1 2 1 2 1.23 3 1.2345 4
Bien sûr avec number(5,2) on a moins de décimale, d'où la différence pour 1.2345...
number(5,2) aura une taille de 1 à 5 octets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select vsize(cast(0 as number(5,2))), vsize(cast(-999.99 as number(5,2))) from dual VSIZE(CAST(0ASNUMBER(5,2))) VSIZE(CAST(-999.99ASNUMBER(5,2))) --------------------------- --------------------------------- 1 5
quant à number, c'est de 1 à 21 bits. Pour binary_float et binary_double, c'est toujours 4 et 8 bits
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 select vsize(cast(0 as number)) "number", vsize(cast(-1e125/7 as number)) "number", vsize(cast(0 as binary_float)) "binary_float", vsize(cast(-1e125/7 as binary_float)) "binary_float", vsize(cast(0 as binary_double)) "binary_double", vsize(cast(-1e125/7 as binary_double)) "binary_double" from dual number number_1 binary_float binary_float_1 binary_double binary_double_1 ---------- ---------- ------------ -------------- ------------- --------------- 1 21 4 4 8 8
Si le NUMBER fonctionne en gros comme un VARCHAR2, il doit donc stocker je présume la taille et la position du point ?
Et saurais-tu pourquoi il stocke un chiffre par octet pour les NUMBER(compatibilités OS ?), alors que pour les float c'est stocké en binaire ?
![]()
Partager