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).

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top