#sql #sql-server #sql-server-2005
#sql #sql-сервер #sql-server-2005
Вопрос:
Работа с SQL 2005
У меня есть таблица с 5 столбцами
ID - int
Param - smallint
Data1 - image
Data2 - image
Data3 - image
Размер изображения может составлять всего 20 байт и может достигать 1 МБ (да, более 8 кб). Размер изображения не является постоянным, поскольку он содержит сжатые данные. Большая часть большого двоичного объекта date составляет от 512 до 1,5 кБ. Существует логическая связь между Data1, Data2 и Data3, которая является причиной, по которой они хранятся вместе. В базе данных, которая хранит данные за 3 года, имеется 66 миллионов записей.
В попытке улучшить хранение данных и подготовить систему к будущим версиям SQL. Я хочу изменить столбцы изображения на тип данных varbinary (МАКСИМУМ). FILESTREAM был бы другой возможностью, но я не уверен, что это было бы более эффективно для хранения ~ 200 миллионов файлов.
После изменения изображений в varbinary (максимум) Я заметил, что общий размер таблицы уменьшился (совсем немного), но каждый раз, когда я добавляю / удаляю данные, для завершения процесса требуется гораздо больше времени.
Насколько я понимаю, если значение varbinary (max) меньше 8 кб, оно помещается внутри таблицы, а если оно больше 8 кб, оно помещается где-то еще, и указатель на эти данные сохраняется в таблице. При использовании изображения указатель сохраняется, даже если объем данных изображения составляет менее 8 кб.
Как правило, ежедневно добавляется и удаляется 20000 записей, поэтому данных добавляется / удаляется не так много, и один выбор обычно делается для 10-200 последовательных записей.
Есть ли способ настроить, чтобы данные varbinary (max) всегда сохранялись (независимо от размера) вне таблицы таким же образом, как сохраняется изображение?
Ответ №1:
Вы можете использовать sp_tableoption
для установки «типов больших значений вне строки»