ORACLE : occupation mémoire du varchar2 - SQL/NoSQL - Programmation
Marsh Posté le 22-06-2005 à 12:15:56
batin a écrit : Bonjour, |
Aucune idée...
Mais est-ce que ce serait pas tout bêtement plus malin de virer ta colonne 2 de cette table et de la mettre dans une autre qui fera la relation entre col1 et col2?
Marsh Posté le 22-06-2005 à 12:28:40
sisi bien sur.
Mais bon, c'était pour un exemple.
En fait, ma table contient un number + 20 champs textes qui ne sont pas tous remplis (environ 2 ou 3 par lignes).
Impossible de changer la structure de la table, c'est un progiciel ...
Marsh Posté le 22-06-2005 à 12:52:44
varchar, c'est à taille variable ... il me semble même que ca occupe 1 octet caractère de plus que la chaine à stocker, mais c'est à vérifier.
edit : correction mineure ...
Marsh Posté le 22-06-2005 à 13:20:05
je confirme oracle intelligement stocke uniquement la taille de la chaine plus un caractere pour la longueur effective...
Marsh Posté le 22-06-2005 à 16:17:55
heu ... en quoi oracle est-il intelligent si il réserve systématiquement LONGUEUR_VARCHAR+1 ?
Donc, si j'ai 20 champs VARCHAR(100), chaque ligne occupe 2000 (ou 2020 avec le +1) ... C'est nul, surtout si un seul champ est rempli ...
c'est quoi la différence entre VARCHAR et VARCHAR2 ?
Marsh Posté le 22-06-2005 à 16:43:47
Je ne suis pas sûre mais, je crois que le VARCHAR2 réserve LONGUER_REELLE +1 donc si chaîne vide juste 1.
C'est d'ailleurs pour ça qu'il vaut mieux utiliser VARCHAR2 que CHAR...
Marsh Posté le 24-06-2005 à 10:40:27
oui, c'est bien ce que je voulais dire ... la taille n'est pas fixée à celle donné lors de la création de la table. Il s'agit de la longueur réelle de la chaine stockée +1.
donc une chaine "foo" sera stockée avec 4 caractères quand bien même on la stockerait dans un champs prévu pour des chaines allant jusqu'à 200 caractères
Marsh Posté le 22-06-2005 à 11:36:51
Bonjour,
question simple :
j'ai une table toto, avec une colonne col1 number, et une col2 varchar(1000).
Sachant que ma colonne 2 (donc varchar2) est vide dans 99% des cas, est ce que il y a une réservation de 1000 caractères par ligne (dans le tablespace) ou oracle gère intelligement le truc en n'occupant de la place que si le champ est non nul.
Je suis en oracle v7 et supérieur...
Merci !!