Getsuyodev, Programming is mainly used when constructing an application. Programming requires knowledge of application domains, algorithms, and programming language expertise. Programming can be developed in different logic based on developer knowledge.

SGBD – Les variables Table et les Tables temporaires

Système de gestion de base de données



Utilisation des variables de type table ou des tables temporaires

Voilà deux types de tables souvent utilisées mais mal maîtrisées, surtout au regard des performances qu’elles offrent, qui ne sont pas très bonnes.

Voyons pourquoi …

SQL Server permet de stocker dans des variables table ou des tables temporaires (locales à la session ou globales à l’instance) des données.

Pour déclarer une variable table, il suffit d’écrire, par exemple :

Avantages : comme toute variable, elle est détruite dès la fin de la session utilisateur

Inconvénients : elle n’est pas indexable comme une table, et aucune statistique n’est maintenue sur les colonnes.

Pour créer une table temporaire locale à la session, il suffit d’écrire, par exemple :

Pour créer une table temporaire globale à l’instance SQL Server, il suffit d’écrire, par exemple 

Avantages : des statistiques sont maintenues sur les colonnes, qui sont de plus indexables.

Inconvénients : il est préférable de supprimer la table à la fin de la session, même si elle est automatiquement détruite lors de la fin de celle-ci.

Si vous pensiez que ces tables sont stockées uniquement dans la RAM du serveur, vous avez fait fausse route, car comme toute table, le moteur de base de données se doit de les persister.
Néanmoins les pages que contiennent ces tables demeurent dans le cache de données.

Alors, où sont persistées ces tables ?

Voici le code commenté :

Comme vous pouvez le voir, SQL Server n’attribue pas le nom de votre table, mais une suite d’hexadécimaux.

Cela permet de garantir que deux sessions qui ont des variables tables qui portent le même nom n’utilisent pas les mêmes données.

En effet si nous exécutons :

Et si nous tentons d’afficher la structure de ces tables, dans l’explorateur d’objets, on obtient le message d’erreur suivant :

Il en va quelque peut différemment pour les tables temporaires locales à la session.
Si nous exécutons :

Où les points de suspension remplacent un grand nombre d’underscores.

Un « numéro » est ainsi attribué à chaque table temporaire locale créée, pour les mêmes raisons que vous la variable table :
cela permet de garantir que deux sessions qui ont des tables temporaires locales qui portent le même nom n’utilisent pas les mêmes données.

Enfin, voyons ce qui se passe pour une table temporaire globale :

Là, le nom de la table est celui que l’on a donné dans la requête. Il est dès lors impossible de créer une table temporaire globale portant le même nom : ouvrons une autre session et exécutons :

La console de SSMS affiche alors :


Comments are closed, but trackbacks and pingbacks are open.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More