logo

Performance : Gestion des index – compression

Bonjour,
J’utilise de très grosses tables (plusieurs millions de lignes; entre 10 et 50 variables) que j’ai créées à partir de fichiers texte.
Pour les variables caractères, c’est le nombre que j’ai précisé après $ qui a été pris en compte. Pour les champs numériques c’est Best12, quelle que soit la longueur que j’avais spécifiée.
J’ai crée des index sur mes tables. Les temps d’accès sont relativement longs je trouve. Je pensais compresser mes tables. Comment m’assurer que mes tables sont optimisées ? La compression est-elle incompatible avec les indexes ?
Merci

Bonjour.

La compression n’est pas incompatible avec les index. Vous pouvez indexer une table compressée et vice-versa. Cependant, deux remarques suite à votre propos :

  • attention à ne pas confondre LENGTH et FORMAT ; le premier est le nombre d’octets sur lequel une valeur est stockée et le second une indication de la manière dont les valeurs sont affichées. Dans le cas d’une variable caractère, les deux sont souvent semblables : une variable stockée sur 3 octets s’affiche sur 3 caractères (LENGTH=$ 3 et FORMAT=$3.). Pour les variables numériques, on a un LENGTH de 8 (par défaut) et un affichage assez libre : BEST12. signifie juste que SAS utilisera au plus 12 caractères pour afficher la valeur. Le LENGTH de 8 est approprié si la variable contient des décimales. Sinon, selon son ordre de grandeur, on peut gagner de la place avec un LENGTH plus court, entre 3 et 7.
  • la compression n’est pas un moyen de gagner du TEMPS mais de la PLACE. Je n’ai pas l’impression que ce soit votre but ; en effet, une table compressée (zippée en interne par SAS) nécessite plus de temps à s’ouvrir (il faut la décompresser) et à s’écrire (il faut la recompresser). Ce n’est donc pas forcément la solution espérée.