table temporaire : create table ou Declare table ?
5 réponses
Steph
Bonjour a tous,
j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante :
-----------------------------
vaut il mieux, pour accelerer le temps de traitement de cette PS, creer
une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? :
--------------------------------
c'est une table temporaire dans la quelle on stocke les resultats des
sous requetes, permettant ainsi a chaque fois des faires des
"select id from xxx where id in (select id from [@#]matable)"
puis de faire un delete + insert dans la [@#]matable des id retrouvés"
(et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est
utilisé.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Philippe Bouchardy
Bonjour Stéphane,
Quelques petites précisions : quand on parle de tables (#), on parle de table temporaire locale, propre à la session de l'utilisateur qui l'a crée. On utilise le caractère ## pour obtenir une table temporaire de portée global (multi session).
Le troisième type de tables temporaires et le type table variable (@), ce type de tables à l'inverse des 2 autres n'est généralement pas stocké sur le disque mais directement en mémoire (sauf en case de dépassement de mémoire), l'avantage dans ce cas est qu'il ni y a pas de IO sur le disque.
Néanmoins le scope des tables variables n'est pas le même, et leur porté se limite a la procédure dans laquelle la table est créée.
Il n'est effectivement pas possible de créer des index non-cluster dans un table variable par contre vous pouvez créer un index cluster qui dans votre cas devrait suffire.
Microsoft à publié un KB trés interessante à ce sujet, je vous invite à la consutler à cette adresse http://support.microsoft.com/default.aspx/kb/305977
Cordialement,
"Steph" wrote in message news:483129c2$0$862$
Bonjour a tous, j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante : ----------------------------- vaut il mieux, pour accelerer le temps de traitement de cette PS, creer une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? : -------------------------------- c'est une table temporaire dans la quelle on stocke les resultats des sous requetes, permettant ainsi a chaque fois des faires des "select id from xxx where id in (select id from [@#]matable)" puis de faire un delete + insert dans la [@#]matable des id retrouvés" (et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est utilisé.
merci aux experts...
Bonjour Stéphane,
Quelques petites précisions : quand on parle de tables (#), on parle de
table temporaire locale, propre à la session de l'utilisateur qui l'a crée.
On utilise le caractère ## pour obtenir une table temporaire de portée
global (multi session).
Le troisième type de tables temporaires et le type table variable (@), ce
type de tables à l'inverse des 2 autres n'est généralement pas stocké sur le
disque mais directement en mémoire (sauf en case de dépassement de mémoire),
l'avantage dans ce cas est qu'il ni y a pas de IO sur le disque.
Néanmoins le scope des tables variables n'est pas le même, et leur porté se
limite a la procédure dans laquelle la table est créée.
Il n'est effectivement pas possible de créer des index non-cluster dans un
table variable par contre vous pouvez créer un index cluster qui dans votre
cas devrait suffire.
Microsoft à publié un KB trés interessante à ce sujet, je vous invite à la
consutler à cette adresse
http://support.microsoft.com/default.aspx/kb/305977
Cordialement,
"Steph" <steph@pipoland.com> wrote in message
news:483129c2$0$862$ba4acef3@news.orange.fr...
Bonjour a tous,
j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante :
-----------------------------
vaut il mieux, pour accelerer le temps de traitement de cette PS, creer
une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? :
--------------------------------
c'est une table temporaire dans la quelle on stocke les resultats des sous
requetes, permettant ainsi a chaque fois des faires des
"select id from xxx where id in (select id from [@#]matable)"
puis de faire un delete + insert dans la [@#]matable des id retrouvés"
(et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est
utilisé.
Quelques petites précisions : quand on parle de tables (#), on parle de table temporaire locale, propre à la session de l'utilisateur qui l'a crée. On utilise le caractère ## pour obtenir une table temporaire de portée global (multi session).
Le troisième type de tables temporaires et le type table variable (@), ce type de tables à l'inverse des 2 autres n'est généralement pas stocké sur le disque mais directement en mémoire (sauf en case de dépassement de mémoire), l'avantage dans ce cas est qu'il ni y a pas de IO sur le disque.
Néanmoins le scope des tables variables n'est pas le même, et leur porté se limite a la procédure dans laquelle la table est créée.
Il n'est effectivement pas possible de créer des index non-cluster dans un table variable par contre vous pouvez créer un index cluster qui dans votre cas devrait suffire.
Microsoft à publié un KB trés interessante à ce sujet, je vous invite à la consutler à cette adresse http://support.microsoft.com/default.aspx/kb/305977
Cordialement,
"Steph" wrote in message news:483129c2$0$862$
Bonjour a tous, j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante : ----------------------------- vaut il mieux, pour accelerer le temps de traitement de cette PS, creer une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? : -------------------------------- c'est une table temporaire dans la quelle on stocke les resultats des sous requetes, permettant ainsi a chaque fois des faires des "select id from xxx where id in (select id from [@#]matable)" puis de faire un delete + insert dans la [@#]matable des id retrouvés" (et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est utilisé.
merci aux experts...
Fred BROUARD
Philippe Bouchardy a écrit :
Bonjour Stéphane,
Quelques petites précisions : quand on parle de tables (#), on parle de table temporaire locale, propre à la session de l'utilisateur qui l'a crée. On utilise le caractère ## pour obtenir une table temporaire de portée global (multi session).
Le troisième type de tables temporaires et le type table variable (@), ce type de tables à l'inverse des 2 autres n'est généralement pas stocké sur le disque mais directement en mémoire (sauf en case de dépassement de mémoire), l'avantage dans ce cas est qu'il ni y a pas de IO sur le disque.
Hélas, erreur, la table est bien instanciée en tempdb...
Néanmoins le scope des tables variables n'est pas le même, et leur porté se limite a la procédure dans laquelle la table est créée.
Il n'est effectivement pas possible de créer des index non-cluster dans un table variable par contre vous pouvez créer un index cluster qui dans votre cas devrait suffire.
Microsoft à publié un KB trés interessante à ce sujet, je vous invite à la consutler à cette adresse http://support.microsoft.com/default.aspx/kb/305977
Cordialement,
"Steph" wrote in message news:483129c2$0$862$
Bonjour a tous, j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante : ----------------------------- vaut il mieux, pour accelerer le temps de traitement de cette PS, creer une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? : -------------------------------- c'est une table temporaire dans la quelle on stocke les resultats des sous requetes, permettant ainsi a chaque fois des faires des "select id from xxx where id in (select id from [@#]matable)" puis de faire un delete + insert dans la [@#]matable des id retrouvés" (et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est utilisé.
merci aux experts...
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************
Philippe Bouchardy a écrit :
Bonjour Stéphane,
Quelques petites précisions : quand on parle de tables (#), on parle de
table temporaire locale, propre à la session de l'utilisateur qui l'a crée.
On utilise le caractère ## pour obtenir une table temporaire de portée
global (multi session).
Le troisième type de tables temporaires et le type table variable (@), ce
type de tables à l'inverse des 2 autres n'est généralement pas stocké sur le
disque mais directement en mémoire (sauf en case de dépassement de mémoire),
l'avantage dans ce cas est qu'il ni y a pas de IO sur le disque.
Hélas, erreur, la table est bien instanciée en tempdb...
Néanmoins le scope des tables variables n'est pas le même, et leur porté se
limite a la procédure dans laquelle la table est créée.
Il n'est effectivement pas possible de créer des index non-cluster dans un
table variable par contre vous pouvez créer un index cluster qui dans votre
cas devrait suffire.
Microsoft à publié un KB trés interessante à ce sujet, je vous invite à la
consutler à cette adresse
http://support.microsoft.com/default.aspx/kb/305977
Cordialement,
"Steph" <steph@pipoland.com> wrote in message
news:483129c2$0$862$ba4acef3@news.orange.fr...
Bonjour a tous,
j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante :
-----------------------------
vaut il mieux, pour accelerer le temps de traitement de cette PS, creer
une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? :
--------------------------------
c'est une table temporaire dans la quelle on stocke les resultats des sous
requetes, permettant ainsi a chaque fois des faires des
"select id from xxx where id in (select id from [@#]matable)"
puis de faire un delete + insert dans la [@#]matable des id retrouvés"
(et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est
utilisé.
merci aux experts...
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Quelques petites précisions : quand on parle de tables (#), on parle de table temporaire locale, propre à la session de l'utilisateur qui l'a crée. On utilise le caractère ## pour obtenir une table temporaire de portée global (multi session).
Le troisième type de tables temporaires et le type table variable (@), ce type de tables à l'inverse des 2 autres n'est généralement pas stocké sur le disque mais directement en mémoire (sauf en case de dépassement de mémoire), l'avantage dans ce cas est qu'il ni y a pas de IO sur le disque.
Hélas, erreur, la table est bien instanciée en tempdb...
Néanmoins le scope des tables variables n'est pas le même, et leur porté se limite a la procédure dans laquelle la table est créée.
Il n'est effectivement pas possible de créer des index non-cluster dans un table variable par contre vous pouvez créer un index cluster qui dans votre cas devrait suffire.
Microsoft à publié un KB trés interessante à ce sujet, je vous invite à la consutler à cette adresse http://support.microsoft.com/default.aspx/kb/305977
Cordialement,
"Steph" wrote in message news:483129c2$0$862$
Bonjour a tous, j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante : ----------------------------- vaut il mieux, pour accelerer le temps de traitement de cette PS, creer une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? : -------------------------------- c'est une table temporaire dans la quelle on stocke les resultats des sous requetes, permettant ainsi a chaque fois des faires des "select id from xxx where id in (select id from [@#]matable)" puis de faire un delete + insert dans la [@#]matable des id retrouvés" (et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est utilisé.
merci aux experts...
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************
Fred BROUARD
Le mieux est de s'en passer. Depuis SQL Server 2005 les CTE et donc la récursivité, rare sont les traitements qui ont effectivement besoin d'une table temporaire...
A +
Steph a écrit :
Bonjour a tous, j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante : ----------------------------- vaut il mieux, pour accelerer le temps de traitement de cette PS, creer une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? : -------------------------------- c'est une table temporaire dans la quelle on stocke les resultats des sous requetes, permettant ainsi a chaque fois des faires des "select id from xxx where id in (select id from [@#]matable)" puis de faire un delete + insert dans la [@#]matable des id retrouvés" (et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est utilisé.
merci aux experts...
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************
Le mieux est de s'en passer. Depuis SQL Server 2005 les CTE et donc la
récursivité, rare sont les traitements qui ont effectivement besoin
d'une table temporaire...
A +
Steph a écrit :
Bonjour a tous,
j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante :
-----------------------------
vaut il mieux, pour accelerer le temps de traitement de cette PS, creer
une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? :
--------------------------------
c'est une table temporaire dans la quelle on stocke les resultats des
sous requetes, permettant ainsi a chaque fois des faires des
"select id from xxx where id in (select id from [@#]matable)"
puis de faire un delete + insert dans la [@#]matable des id retrouvés"
(et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est
utilisé.
merci aux experts...
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Le mieux est de s'en passer. Depuis SQL Server 2005 les CTE et donc la récursivité, rare sont les traitements qui ont effectivement besoin d'une table temporaire...
A +
Steph a écrit :
Bonjour a tous, j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante : ----------------------------- vaut il mieux, pour accelerer le temps de traitement de cette PS, creer une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? : -------------------------------- c'est une table temporaire dans la quelle on stocke les resultats des sous requetes, permettant ainsi a chaque fois des faires des "select id from xxx where id in (select id from [@#]matable)" puis de faire un delete + insert dans la [@#]matable des id retrouvés" (et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est utilisé.
merci aux experts...
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation *********************** http://www.sqlspot.com *************************
helios services
Fred BROUARD a écrit :
Le mieux est de s'en passer. Depuis SQL Server 2005 les CTE et donc la récursivité, rare sont les traitements qui ont effectivement besoin d'une table temporaire...
A +
Steph a écrit :
Bonjour a tous, j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante : ----------------------------- vaut il mieux, pour accelerer le temps de traitement de cette PS, creer une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? : -------------------------------- c'est une table temporaire dans la quelle on stocke les resultats des sous requetes, permettant ainsi a chaque fois des faires des "select id from xxx where id in (select id from [@#]matable)" puis de faire un delete + insert dans la [@#]matable des id retrouvés" (et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est utilisé.
merci aux experts...
mais peut on faire confiance à quelqu'un qui prétends coder plus de 65536 valeurs sur 2 octets ?
-- Dr Thierry HOLZ HELIOS SERVICES 180 rue de la croix du chene 60250 HEILLES www.openqm.com02.net www.pick.com02.net
Fred BROUARD a écrit :
Le mieux est de s'en passer. Depuis SQL Server 2005 les CTE et donc la
récursivité, rare sont les traitements qui ont effectivement besoin
d'une table temporaire...
A +
Steph a écrit :
Bonjour a tous,
j'ai une PS relativement sollicitee, et cette PS fait un traitement
lourd.
Ma question est la suivante :
-----------------------------
vaut il mieux, pour accelerer le temps de traitement de cette PS,
creer une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? :
--------------------------------
c'est une table temporaire dans la quelle on stocke les resultats des
sous requetes, permettant ainsi a chaque fois des faires des
"select id from xxx where id in (select id from [@#]matable)"
puis de faire un delete + insert dans la [@#]matable des id retrouvés"
(et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4
est utilisé.
merci aux experts...
mais peut on faire confiance à quelqu'un qui prétends coder plus de
65536 valeurs sur 2 octets ?
Le mieux est de s'en passer. Depuis SQL Server 2005 les CTE et donc la récursivité, rare sont les traitements qui ont effectivement besoin d'une table temporaire...
A +
Steph a écrit :
Bonjour a tous, j'ai une PS relativement sollicitee, et cette PS fait un traitement lourd.
Ma question est la suivante : ----------------------------- vaut il mieux, pour accelerer le temps de traitement de cette PS, creer une table temporaire avec :
declare @matable table {...}
ou en
declare table #matable {...}
L'avantage de la table globale est que l'on peut y mettre des index.
L'utilisation de cette table ? : -------------------------------- c'est une table temporaire dans la quelle on stocke les resultats des sous requetes, permettant ainsi a chaque fois des faires des "select id from xxx where id in (select id from [@#]matable)" puis de faire un delete + insert dans la [@#]matable des id retrouvés" (et ceci n fois)
pour info : le serveur a 12 giga de ram, et actuellement seulement 4 est utilisé.
merci aux experts...
mais peut on faire confiance à quelqu'un qui prétends coder plus de 65536 valeurs sur 2 octets ?
-- Dr Thierry HOLZ HELIOS SERVICES 180 rue de la croix du chene 60250 HEILLES www.openqm.com02.net www.pick.com02.net
Philippe Bouchardy
Bonjour Fred,
Votre poste du 25 mai m'a fait approfondir mes recherches sur la gestion des tables variable :
En re-parcourant le livre SQL Server 2005 Implementation and Mainteance MCTS 40-431 Microsoft Press, j'ai trouvé en Page 122, Table temporaire, l'explication suivante :
Table variables provide an alternative to temporary tables and can be user in functions, triggers, and stored procedures. Instead of storing the table and all date wihtin the table in the tempdb database on disk, a table variable and all associated data is stored in memory. However, if the amout of data placed into the table variable causes it to require more storage space than is available in memory, the overflow will be spooled to disk within tempdb.
==> J'en conclu que les Tables Variables sont en mémoire principalement
En cherchant sur le web je trouve la KB de microsoft 305977 http://support.microsoft.com/kb/305977 qui explique ceci (Note cette KB parle de la gestion des tables dans SQL Server 2000) :
Q4: Are table variables memory-only structures that are assured better performance as compared to temporary or permanent tables, because they are maintained in a database that resides on the physical disk?
A4: A table variable is not a memory-only structure. Because a table variable might hold more data than can fit in memory, it has to have a place on disk to store data. Table variables are created in the tempdb database similar to temporary tables. If memory is available, both table variables and temporary tables are created and processed while in memory (data cache).
==> J'en conclu que les Tables Variables sont dans TempDB aussi, et qui si il y assez de mémoire la table est chargée uniquement en mémoire, idem pour les tables temporaires.
Mes questions sont les suivantes :
- S'il y a assez de mémoire disponible la Table Variable est créé en mémoire seulement ?
- Quel paramètres rentre en compte pour définir cette limite.
- Quelle différence / interet par rapport aux tables temporaires "classiques" ?
Pourriez-vous apporter des informations complémentaires sur leur gestion ?
D'avance merci de votre réponse
Cordialement,
Bonjour Fred,
Votre poste du 25 mai m'a fait approfondir mes recherches sur la gestion des
tables variable :
En re-parcourant le livre SQL Server 2005 Implementation and Mainteance MCTS
40-431 Microsoft Press, j'ai trouvé en Page 122, Table temporaire,
l'explication suivante :
Table variables provide an alternative to temporary tables and can be user
in functions, triggers, and stored procedures. Instead of storing the table
and all date wihtin the table in the tempdb database on disk, a table
variable and all associated data is stored in memory. However, if the amout
of data placed into the table variable causes it to require more storage
space than is available in memory, the overflow will be spooled to disk
within tempdb.
==> J'en conclu que les Tables Variables sont en mémoire principalement
En cherchant sur le web je trouve la KB de microsoft 305977
http://support.microsoft.com/kb/305977 qui explique ceci (Note cette KB
parle de la gestion des tables dans SQL Server 2000) :
Q4: Are table variables memory-only structures that are assured better
performance as compared to temporary or permanent tables, because they are
maintained in a database that resides on the physical disk?
A4: A table variable is not a memory-only structure. Because a table
variable might hold more data than can fit in memory, it has to have a place
on disk to store data. Table variables are created in the tempdb database
similar to temporary tables. If memory is available, both table variables
and temporary tables are created and processed while in memory (data cache).
==> J'en conclu que les Tables Variables sont dans TempDB aussi, et qui si
il y assez de mémoire la table est chargée uniquement en mémoire, idem pour
les tables temporaires.
Mes questions sont les suivantes :
- S'il y a assez de mémoire disponible la Table Variable est créé en
mémoire seulement ?
- Quel paramètres rentre en compte pour définir cette limite.
- Quelle différence / interet par rapport aux tables temporaires
"classiques" ?
Pourriez-vous apporter des informations complémentaires sur leur gestion ?
Votre poste du 25 mai m'a fait approfondir mes recherches sur la gestion des tables variable :
En re-parcourant le livre SQL Server 2005 Implementation and Mainteance MCTS 40-431 Microsoft Press, j'ai trouvé en Page 122, Table temporaire, l'explication suivante :
Table variables provide an alternative to temporary tables and can be user in functions, triggers, and stored procedures. Instead of storing the table and all date wihtin the table in the tempdb database on disk, a table variable and all associated data is stored in memory. However, if the amout of data placed into the table variable causes it to require more storage space than is available in memory, the overflow will be spooled to disk within tempdb.
==> J'en conclu que les Tables Variables sont en mémoire principalement
En cherchant sur le web je trouve la KB de microsoft 305977 http://support.microsoft.com/kb/305977 qui explique ceci (Note cette KB parle de la gestion des tables dans SQL Server 2000) :
Q4: Are table variables memory-only structures that are assured better performance as compared to temporary or permanent tables, because they are maintained in a database that resides on the physical disk?
A4: A table variable is not a memory-only structure. Because a table variable might hold more data than can fit in memory, it has to have a place on disk to store data. Table variables are created in the tempdb database similar to temporary tables. If memory is available, both table variables and temporary tables are created and processed while in memory (data cache).
==> J'en conclu que les Tables Variables sont dans TempDB aussi, et qui si il y assez de mémoire la table est chargée uniquement en mémoire, idem pour les tables temporaires.
Mes questions sont les suivantes :
- S'il y a assez de mémoire disponible la Table Variable est créé en mémoire seulement ?
- Quel paramètres rentre en compte pour définir cette limite.
- Quelle différence / interet par rapport aux tables temporaires "classiques" ?
Pourriez-vous apporter des informations complémentaires sur leur gestion ?