문제

성능 또는 유연성 측면에서 비트 마스크를 저장하기 위해 Int vs Varbinary를 사용한다는 장점이 있습니까?

내 목적을 위해, 나는 항상이 비트 마스크에 대한 읽기를 할 것입니다 (쓰기 또는 업데이트 없음).

도움이 되었습니까?

해결책

당신은 확실히 사용해야합니다 INT (32 개의 깃발이 필요한 경우) 또는 BIGINT (64 깃발의 경우). 더 많은 플래그가 필요하면 사용할 수 있습니다 BINARY (그러나 응용 프로그램에 왜 그렇게 많은 깃발이 필요한지 스스로에게 물어봐야 할 것입니다).

또한 적분 유형을 사용하는 경우 표준을 사용할 수 있습니다. 비트 타이어 운영자 바이트 배열을 적분 유형으로 변환하지 않고 직접.

더 많은 깃발이 필요하고 사용해야하는 경우 BINARY 비트 타이어 운영자에 대한 기본 지원이 상실되므로 플래그 값을 쉽게 확인하는 데 도움이됩니다. 아마도 플래그 값을 클라이언트 응용 프로그램으로 확인하는 것을 클라이언트 애플리케이션으로 옮길 것입니다. 그러나 T-SQL에서 편안하게 프로그래밍하는 경우 옵션이기도합니다. C#을 사용하는 경우 a BitArray 필요한 작업과 함께 클래스와 Java에는 BitSet 수업.

다른 팁

비트 마스크 대신 비트 열을 사용하는 것이 일반적으로 선호되는 것으로 간주됩니다. 그들은 페이지에 함께 포장 될 것이므로 더 이상 방을 가져 가지 않을 것입니다. 나도 항상 int 또는 bigint 열을 사용하여 모든 열 이름 타이핑을 피하기 위해 int 또는 bigint 열을 사용하는 것 같습니다.

글쎄, INT가 저장 공간이 적고 일반적으로 작업하기가 조금 더 쉽다는 점을 고려하면 varbinary를 사용하는 이유는 확실하지 않습니다.

I usually agree with @hainstech's answer of using bit fields, because you can explicitly name each bit field to indicate what it should store. However I haven't seen a practical approach to doing bitmask comparisons with bit fields. With SQL Server's bitwise operators (&, |, etc...) it's easy to find out if a range of flags are set. A lot more work to do that with equality operators against a large number of bit fields.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top