MS-SQL prend-il en charge les tables en mémoire?
Récemment, j'ai commencé à changer certaines de nos applications de soutien MS SQL Server
comme une alternative de back-end.
L'un des problèmes de compatibilité que j'ai rencontré est l'utilisation de MySQL et CRÉER une TABLE TEMPORAIRE pour créer dans la mémoire des tables contenant des données pour un accès très rapide au cours d'une session sans avoir besoin pour le stockage permanent.
Quel est l'équivalent en MS SQL?
Une exigence est que j'ai besoin d'être en mesure d'utiliser la table temporaire comme tous les autres, en particulier JOIN
avec les permanents.
source d'informationauteur Hanno Fietz
Vous devez vous connecter pour publier un commentaire.
@Keith
C'est une idée fausse commune: Tableau des variables ne sont PAS forcément stockées dans la mémoire. En fait SQL Server décide de garder la variable dans la mémoire ou pour le déversement à la base de données TempDB. Il n'y a aucun moyen fiable (au moins dans SQL Server 2005) pour s'assurer que le tableau de données est conservée en mémoire. Pour plus d'info regarder ici
Vous pouvez créer des variables de table (en mémoire), et deux différents types de table temp:
Edit:
Suivantes commentaires, je pense que cela a besoin d'un petit éclaircissement.
#table
et##table
sera toujours dans la base de données TempDB.@Table
variables sera normalement dans la mémoire, mais ne sont pas garantis. SQL décide basé sur le plan de requête, et utilise la base de données TempDB si il en a besoin.Vous pouvez déclarer un tableau "variable" dans SQL Server 2005, comme ceci:
Vous alors se référer à elle comme une variable:
Pas besoin de la faire tomber, il va loin quand la variable est hors de portée.
Il est possible avec MS SQL Server 2014.
Voir: http://msdn.microsoft.com/en-us/library/dn133079.aspx
Voici un exemple de SQL de génération de code (à partir de MSDN):
Une bonne billet de blog ici mais, fondamentalement, le préfixe des tables temporaires locales avec # et global temp avec ## - eg
Je comprends ce que vous essayez d'atteindre. Bienvenue dans le monde d'une variété de bases de données!
SQL server 2000 prend en charge les tables temporaires créées par la préfixation d'un # pour le nom de la table, rendant accessible localement table temporaire (local de la session) et précédé de ## pour le nom de la table, pour accessible dans le monde entier tables temporaires.e.g #MyLocalTable et ##MyGlobalTable respectivement.
SQL server 2005 et au-dessus du support à la fois des tables temporaires (local, global) et les variables de table - méfiez-vous de nouvelles fonctionnalités sur les variables de table dans SQL 2008 et la libération de deux! La différence entre les tables temporaires et les variables de table n'est pas si grand, mais se tient dans la façon dont le serveur de base de données gère.
Je ne voudrais pas parler des versions antérieures de SQL server 7, 6, bien que j'ai travaillé avec eux et c'est là que j'ai pris, de toute façon 🙂
Il est courant de penser que les variables de table toujours résident en mémoire, mais c'est faux. En fonction de l'utilisation de la mémoire et le serveur de base de données de volume de transactions, une variable de table de pages peuvent être exportées à partir de la mémoire et sont écrites dans la base de données tempdb et le reste de la transformation a lieu là-bas (dans la base de données tempdb).
Veuillez noter que la base de données tempdb est une base de données sur une instance avec aucun des objets permanents dans la nature, mais il est responsable de la gestion des charges de travail impliquant les transactions côté comme de tri, et d'autres travaux de traitement qui est de nature temporaire. D'autre part, les variables de table (généralement avec de petits de données) sont conservés dans la mémoire vive (RAM) en les rendant plus rapide d'accès et, par conséquent, moins d'e /s de disque dans l'utilisation de la base de données tempdb disque lors de l'utilisation de variables de table avec des données plus petite par rapport à des tables temporaires qui toujours se connecter à la base de données tempdb.
Table de variables ne peuvent pas être indexées, tandis que les tables temporaires (à la fois locale et mondiale) peuvent être indexées pour un traitement plus rapide dans le cas où la quantité de données est importante. Ainsi vous savez que votre choix en cas de traitement plus rapide, avec de gros volumes de données temporaire des transactions. Il est également intéressant de noter que les opérations sur les variables de table ne sont pas enregistrés et ne peuvent pas être annulées, tandis que celles effectuées sur les tables temporaires peuvent être restaurées!
En résumé, les variables de table sont meilleures pour les petits de données, tandis que les tables temporaires sont mieux pour les grandes données en cours de traitement temporairement. Si vous aussi vous voulez la bonne opération de contrôle à l'aide de la transaction de blocs, les variables de table ne sont pas une option pour l'annulation de transactions de sorte que vous êtes mieux avec des tables temporaires dans ce cas.
Enfin, les tables temporaires seront toujours plus d'e /s disque, car ils utilisent toujours la base de données tempdb, alors que le tableau des variables ne peut pas augmenter, en fonction de la mémoire les niveaux de stress.
Laissez-moi savoir si vous voulez des conseils sur la façon de régler votre base de données tempdb pour gagner beaucoup de performances plus rapides pour aller au-dessus de 100%!
La syntaxe que vous voulez, c'est:
create table #tablename
La # préfixe identifie la table, comme une table temporaire.
CREATE TABLE #tmptablename
Utiliser le hash/dièse préfixe