J'ai besoin de mettre à jour une base de données SQL Server d'environ 18 Go pour changer un nombre important de TEXT
colonnes en NVARCHAR(MAX)
.
Le problème que j'ai est après avoir exécuté toutes les alter table
commandes, la base de données finit par avoir une taille de près de 26 Go. Je comprends qu'à partir de maintenant, l'utilisation NVARCHAR(MAX)
permettra à la DB de croître plus lentement, mais y a-t-il un moyen d'empêcher ce ballonnement?
sql-server
Aidan Lawless
la source
la source
Réponses:
J'espère que ce message vous sera utile.
http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx
Faits marquants:
Lorsque vous modifiez la colonne de TEXT / NTEXT à NVARCHAR (MAX), la façon dont les données sont stockées n'est pas modifiée, elle met uniquement à jour les métadonnées de la table. La structure des données n'est modifiée que la prochaine fois que la valeur est modifiée. Cela peut être fait immédiatement en exécutant quelque chose comme ceci:
Si vous utilisez le paramètre d'option de table par défaut pour NVARCHAR (MAX), les données de votre table seront plus volumineuses.
- Vous devrez examiner les paramètres et l'environnement de votre option de table avant de modifier le paramètre en fonction de vos besoins.
La taille de votre table finira par diminuer si vous suivez votre instruction alter table avec l'instruction update table.
En bref, si vous exécutez l'instruction de mise à jour, forçant le stockage de la structure de données à être modifié, la taille de votre base de données sera plus petite, comme prévu.
EDIT : Comme vous avez mentionné TEXT et non NTEXT, votre gain d'espace serait moins évident que vous ne le pensez. NTEXT occupe le double de l'espace comme le fait TEXT, mais en même temps, vous devez vous attendre à ce que NVARCHAR (MAX) occupe environ la moitié de l'espace comme le fait NTEXT. Par mon calcul, vous verriez peu de changement par rapport à la taille de votre base de données d'origine.
la source
Cela peut être une erreur dans votre question, mais vous dites TEXT to NVARCHAR (max) et non NTEXT to NVARCHAR (max). Si c'est ce que vous faites vraiment, vous passez d'ANSI à UNICODE et vous ne devriez pas être surpris que cela prenne plus de place (caractères à un octet contre caractères à plusieurs octets).
la source
TEXT
champ existant - passer à unicode prend exactement le double de l'espace de stockage d'ANSI.