2015-10-13 1 views
1

Недавно я ударил ограничение на 10 ГБ в SQL Server Express, и я хочу удалить ненужные столбцы и преобразовать другие столбцы в менее тяжелые типы данных. У меня 29 столбцов, и я просто стесняюсь 50М строк. Из них 29, 20 - поплавки, и только 10 из них очень полезны для меня. Я мог бы полностью сбросить 10 столбцов поплавка и все еще иметь всю необходимую мне информацию. Из 6 оставшихся столбцов 2 являются битами, 2 являются int (необходимы для составного ключа), а 5 - int, но могут быть tinyint.Каковы методы преобразования типа данных столбцов в SQL Server Express 2014?

Как я могу убедиться, что до того, как я изменил тип данных этих 5 столбцов на tinyint, все будет правильно преобразовываться? SSMS предупреждает о потенциальной потере данных при выполнении этого проекта, поэтому я хочу убедиться, что все будет хорошо, прежде чем я продолжу работу и запустим оператор Alter Table.

Является ли это так просто, как:

SELECT [ExperimentID],[CycleCount] --My compound key 
FROM [dbo].[Simulations] 
WHERE (parameter1 < 0 OR parameter1 > 255) OR (parameter2 < 0 OR parameter2 > 255) OR (other search conditions) 

Или есть лучший способ проверить это?

Кроме того, извините, что DB не нормализовался должным образом, мне рекомендовали не нормализовать коллега, чтобы помочь в дальнейшем анализе данных.

+0

Почему плавает? Вам нужны действительно высокие уровни не совсем точной точности ваших чисел? Для преобразования tinyint вы можете проверить MAX (ColumnName), чтобы увидеть, будут ли они вписываться в tinyint. Я бы, скорее всего, не согласился с вашим коллегой по поводу нормализации. Дизайн структуры таблицы должен быть сделан тем, насколько это легко для разработчика в будущем. Это всегда должно быть правильно хранить данные, но это еще одна тема. –

+0

Что-то, о чем нужно помнить, это только удар по дороге по дороге. Если вы будете продолжать добавлять строки, вы снова ударите 10GB. Что ты собираешься делать? –

+0

Эта конкретная БД хранит результаты некоторых симуляций. 56000/90000 уже запущены, и я думаю, что, отбросив большинство плавающих элементов и набрав ints как tinyints, где я могу, БД будет иметь значение менее 10 ГБ. Поплавки необходимы, так как нам нужна как минимум 6 цифр точности за десятичную точку. – ijustlovemath

ответ

0

Везде, где вы хотите изменить тип столбца можно литыми Выберите его, чтобы убедиться, что все идет нормально:

SELECT CAST(Column_Name as tinyint), * 
FROM [dbo].[Simulations] 

Если есть ИНТ значения будет поднимать исключение.

Если вы попытаетесь сократить строки (например, сменив varchar (1000) на varchar (100)), появится сообщение о том, что данные будут усечены.

+0

Я также предлагаю вам проверить размеры файлов, так как большая часть вашей БД может быть файлом журнала, который, я полагаю, бесполезен для вас. Подробнее здесь - https://msdn.microsoft.com/en-us/library/ms189272.aspx - Вам нужно изменить модель восстановления на простой, а затем сжать файл журнала до 0. – GSazheniuk

+0

Журнал для всего БД находится на 20 МБ , поэтому я не думаю, что это проблема.Мне нравится иметь его на «на всякий случай» – ijustlovemath

+0

Тогда да, 20 МБ не имеет смысла, так что держи его лучше, хотя после того, как вы обновите все свои данные, чтобы изменить типы столбцов, он может сразу увеличиться. – GSazheniuk

Смежные вопросы