Влияние больших обнуляемых столбцов в SQL Server - PullRequest
1 голос
/ 09 февраля 2012

Я разрабатываю схему, где некоторые участники могут загружать изображения (на основании разрешения). Я планирую сделать это с помощью столбца varbinary(max).

Какое значение для хранения и производительности следует учитывать между двумя следующими схемами (кроме очевидного, что последний является одним ко многим - это может быть достаточно легко ограничено).

  • Одна таблица со столбцом varbinary(max), обнуляемым
  • Две таблицы, одна для Members, вторая для Pictures

Очевидно, что дополнительное левое объединение снизит производительность, но если я использую подход с одной таблицей, это потребует больше места для хранения (обычно я не считаю, что размер хранилища слишком беспокоит производительность, но для этого проекта у меня довольно жесткие ограничения с моим хостинг-провайдером).

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

Значение переменной столбца со значением NULL, равным NULL, не занимает места в таблице.

Когда вы сохраняете большой двоичный объект, он может храниться в строке или вне строки, в зависимости от размера и т. Д. Это относится к 1 или 2 таблицам

Если у вас есть отдельная таблица, вам необходимо дополнительно сохранить основной ключ участников (или он имеет свой собственный ключ, FK в членах). Тем не менее, это тривиально, хотя по сравнению с размером вашего изображения.

Лично я бы использовал одну таблицу для простоты.
Если, скажем, я не хотел использовать FILESTREAM или использовать другую файловую группу, получил большие двоичные объекты.

1 голос
/ 09 февраля 2012

Храните изображения в одной таблице. Не будет никакого преимущества в хранении или скорости хранения их в отдельной таблице, кроме случаев, когда у вас будет zillions участников, и у 10 из них будет изображение.

Поскольку сервер sql вообще не хранит столбец переменных, допускающий значение NULL, если он имеет значение NULL - вы даже можете получить выигрыш в скорости, сравнивая дизайн с двумя таблицами

Попробуйте использовать столбец FILESTREAM , если ваши изображения достаточно велики (скажем, более 1 Мб). Это позволяет хранить изображения в виде файлов, что ускоряет операции чтения-записи, но с согласованностью резервного копирования.

0 голосов
/ 09 февраля 2012

Лучше вариант ... хранить изображения на диске и добавить пустое поле с именем файла (путь) в таблице Members.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...