SQL Server: varbinary oder int eine Bitmaske zu speichern?
-
03-07-2019 - |
Frage
Gibt es einen Vorteil, int vs varbinary mit Bitmasken in Bezug auf Leistung oder Flexibilität zu speichern.
Für meine Zwecke, werde ich immer liest auf diese Bitmasken tun (keine Schreibvorgänge oder Updates).
Lösung
Sie sollten auf jeden Fall einen INT
verwenden oder BIGINT
(wenn Sie 32 Flaggen benötigen) (64 Flaggen). Wenn Sie mehr Flaggen benötigen könnten Sie BINARY
(aber Sie sollten wahrscheinlich auch sich fragen, warum Sie so viele Fahnen in Ihrer Anwendung benötigen).
Außerdem, wenn Sie einen integralen Typ verwenden, können Sie Standard verwenden Bitoperatoren direkt ohne ein Byte-Array zu einem Integral-Typ umzuwandeln.
Wenn Sie mehr tun, Fahnen benötigen und verwenden BINARY
Sie native Unterstützung für Bitoperatoren verlieren und daher leicht Unterstützung für Flag-Werte zu überprüfen. Ich würde wahrscheinlich zu einer Client-Anwendung überprüft für Flag-Werte bewegen, aber wenn Sie komfortable Programmierung in T-SQL sind, die auch eine Option. Wenn Sie C # verwenden haben Sie eine BitArray
Klasse mit den notwendigen Operationen und in Java haben Sie einen BitSet
Klasse.
Andere Tipps
Es wird allgemein als vorteilhaft angesehen, eine Reihe von Bit-Spalten zu verwenden, anstatt eine Bitmaske. Sie werden auf der Seite zusammengepackt bekommen, damit sie keinen weiteren Platz nehmen. Obwohl auch immer ich mit einem int oder bigint Spalte zu gehen scheinen alle Spaltennamen Eingabe zu vermeiden .. aber mit Intellisense würde ich wahrscheinlich mit den Bit-Spalten gehen.
Nun, ein int unter Berücksichtigung weniger Speicherplatz und ist in der Regel ein wenig leichter zu arbeiten Ich bin nicht sicher, warum Sie einen varbinary verwenden würden.
Ich bin damit einverstanden in der Regel mit @ hainstech Antwort von Bitfeldern verwenden, weil Sie explizit jedes Bit Feld benennen können, um anzuzeigen, was soll es speichern. Allerdings habe ich nicht einen praktischen Ansatz zu tun bitmask Vergleiche mit Bitfeldern gesehen. Mit SQL Server Bit-Operatoren (&, |, etc ...) ist es einfach, um herauszufinden, ob eine Reihe von Flags gesetzt ist. Viel mehr Arbeit zu tun, dass mit der Gleichstellung Betreiber gegen eine große Anzahl von Bitfeldern.