Вопрос

Есть ли какое-либо преимущество использования int vs varbinary для хранения битовых масок с точки зрения производительности или гибкости?

Для моих целей я всегда буду читать эти битовые маски (без записи или обновления).

Это было полезно?

Решение

Вам обязательно следует использовать INT (если вам нужно 32 флага) или BIGINT (для 64 флагов).Если вам нужно больше флагов, вы можете использовать BINARY (но вам, вероятно, также следует спросить себя, зачем вам в приложении так много флагов).

Кроме того, если вы используете целочисленный тип, вы можете использовать стандартный побитовые операторы напрямую, без преобразования массива байтов в целочисленный тип.

Если вам нужно больше флагов и вам нужно использовать BINARY вы теряете встроенную поддержку побитовых операторов и, следовательно, удобную поддержку проверки значений флагов.Я бы, вероятно, перенес проверку значений флагов в клиентское приложение, но если вы умеете программировать на T-SQL, это тоже вариант.Если вы используете C#, у вас есть BitArray класс с необходимыми операциями и в Java у вас есть BitSet сорт.

Другие советы

Обычно считается предпочтительным использовать группу битовых столбцов вместо битовой маски.Они соберутся вместе на странице и не займут больше места.Хотя я тоже всегда использую столбец int или bigint, чтобы избежать ввода имени столбца.но с intellisense я бы, вероятно, выбрал битовые столбцы.

Что ж, учитывая, что у int меньше места для хранения и с ним, как правило, немного проще работать, я не уверен, зачем вам использовать varbinary.

Обычно я согласен с ответом @hainstech об использовании битовых полей, потому что вы можете явно назвать каждое битовое поле, чтобы указать, что оно должно хранить.Однако я не видел практического подхода к сравнению битовых масок с битовыми полями.С помощью побитовых операторов SQL Server (&, | и т. д.) легко узнать, установлен ли диапазон флагов.Намного больше работы предстоит сделать с помощью операторов равенства для большого количества битовых полей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top