Мне нужно обновить базу данных SQL Server размером около 18 ГБ, чтобы изменить значительное количество TEXT
столбцов NVARCHAR(MAX)
.
Проблема, с которой я столкнулся, заключается в том, что после выполнения всех alter table
команд размер базы данных достигает почти 26 ГБ. Я понимаю, что использование здесь NVARCHAR(MAX)
позволит БД расти медленнее, но есть ли способ предотвратить вздутие живота?
sql-server
Эйдан Лоулесс
источник
источник
Ответы:
Я ожидаю, что этот пост поможет вам.
http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx
Основные факты:
Когда вы изменяете столбец с TEXT / NTEXT на NVARCHAR (MAX), способ хранения данных не изменяется, он обновляет только метаданные таблицы. Структура данных изменяется только при следующем изменении значения. Это можно сделать сразу, запустив что-то вроде этого:
Если вы используете настройку параметров таблицы по умолчанию для NVARCHAR (MAX), то данные в вашей таблице будут больше.
- Вам нужно будет просмотреть настройки опций таблицы и условия, прежде чем изменить настройку на то, что соответствует вашим потребностям.
Размер вашей таблицы со временем сократится, если вы будете следовать за оператором alter table оператором update table.
Короче говоря, если вы запустите оператор update, что приведет к изменению хранилища структуры данных, размер вашей базы данных будет меньше, чем ожидалось.
РЕДАКТИРОВАТЬ : Поскольку вы упомянули TEXT, а не NTEXT, ваш выигрыш в космосе будет менее очевидным, чем вы думаете. NTEXT занимает вдвое больше места, чем TEXT, но в то же время следует ожидать, что NVARCHAR (MAX) займет примерно половину пространства, чем NTEXT. По моим подсчетам, вы увидите небольшие изменения по сравнению с исходным размером базы данных.
источник
Это может быть недосмотр в вашем вопросе, но вы говорите TEXT для NVARCHAR (макс.), А не NTEXT для NVARCHAR (макс.). Если это то, что вы действительно делаете, вы переходите с ANSI на UNICODE, и вы не должны удивляться, что это занимает больше места (однобайтовые символы или многобайтовые символы).
источник
TEXT
поля - переход на юникод занимает ровно вдвое больше места для хранения ANSI.