Размер таблицы SQL всегда увеличивается

#sql-server

#sql-сервер

Вопрос:

У меня есть таблица с 5 столбцами с типом данных nvarchar (255). в стандартном отчете зарезервировано 12 74 576 КБ, а данных — 9 79 344. когда я изменил все столбцы на varchar(255), зарезервированный КБ был увеличен до 15 54 687, и данные также были увеличены. Затем я повторно изменил тип данных всех столбцов на nvarchar(255), но зарезервированные КБ и данные снова увеличились. Моя проблема в том, что всякий раз, когда я меняю тип данных столбцов, будь то с nvarchar на varchar или наоборот, стандартный отчет показывает, что зарезервированные КБ и данные увеличиваются.

Ответ №1:

Размер можно уменьшить, уменьшив базу данных:

  • Откройте SQL Server Management Studio
  • Выберите базу данных
  • Откройте контекстное меню
  • Нажмите Задачи
  • Нажмите Сжать
  • Щелкните База данных

Это также может быть достигнуто путем выполнения DBCC SHRINKDATABASE команды.

Если вы хотите освободить место из определенной таблицы, используйте команду ‘DBCC CLEANTABLE’.

Дополнительная информация о последней команде: https://msdn.microsoft.com/en-us/library/ms174418.aspx

Комментарии:

1. Я бы любой ценой избегал делать это с производственной базой данных. Это невероятно опасно предлагать в качестве опции, не убедившись, что они знают, что они будут испытывать огромное количество фрагментации. Вот одна из сотен статей на эту тему. straightpathsql.com/archives/2009/01 /…

2. Для производственных баз данных вы действительно должны быть осторожны. Учитывая тот факт, что Мухаммад изменяет типы данных столбцов, я предполагаю, что это не относится к производственной базе данных.

3. Я хочу сказать, что когда вы предлагаете подобное предложение с ОГРОМНЫМИ потенциальными проблемами, вы бы сделали свой ответ более полным, сообщив об этих предостережениях. Если вы предполагаете, что это не производство, но на самом деле это так, они могут запустить это в производство, а затем задаться вопросом, почему вся их система теперь повреждена.

4. Меня не беспокоит размер базы данных. Мой вопрос в том, почему размер таблицы увеличивается, когда я меняю тип данных с nvarchar на varchar.

5. DBCC не уменьшает размер таблицы.

Ответ №2:

Nvarchar хранит данные в Юникоде. Если у вас есть требования к хранению данных в формате UNICODE или многоязычных, nvarchar — это выбор. Varchar хранит данные ASCII и должен быть вашим типом данных для обычного использования. Что касается использования диска, nvarchar использует 2 байта на символ, тогда как varchar использует 1.

Комментарии:

1. я знаю это, и именно поэтому я в замешательстве, потому что при изменении типа данных с nvarchar на varchar размер таблицы должен уменьшаться, тогда как он увеличивается.

2. Это не освободит пространство без сжатия файлов. Команда сжатия DBCC.

3. в этом случае размер должен быть таким же, как и раньше, но почему он увеличивается.