문제

값이 1이 될 필드가있는 테이블이 있습니다.이 테이블은 초과 근무가 매우 큽니다. 비트 데이터 유형을 사용하는 것이 좋습니까? 아니면 성능에 다른 유형을 사용하는 것이 좋습니다. 물론 모든 필드는 색인화되어야합니다.

도움이 되었습니까?

해결책

공식적으로 비트는 특히 널을 허용하지 않는 경우 가장 빠릅니다. 실제로는 대규모 사용으로도 중요하지 않을 수 있습니다. 그러나 값이 0 또는 1 만 있으면 조금 사용하지 않겠습니까? 값이 2 또는 -1과 같은 유효하지 않은 물건으로 채워지지 않도록하는 가장 좋은 방법처럼 들립니다.

다른 팁

성능에 대한 통계를 줄 수는 없지만 항상 데이터를 가장 잘 대표하는 유형을 사용해야합니다. 원하는 것이 1-0이라면 절대적으로 비트 필드를 사용해야합니다.

더 많은 정보가 데이터베이스를 제공할수록 "추측"을 올바르게 얻을 가능성이 높아집니다.

내가 이해할 수 있듯이 비트 열을 저장하려면 바이트가 필요하지만 (단일 바이트에 8 비트 열을 저장할 수 있음). 따라서이 비트 칼럼의 많은 수 (얼마나 많은가?)가 있으면 저장에 약간의 저장을 할 수 있습니다. Yishai가 말했듯이, 그것은 아마도 성능에 큰 차이를 만들지 않을 것입니다 (비트는 응용 프로그램 코드의 부울으로 더 잘 해석 될 것입니다).

이 열의 두 가지 옵션이 절대 변경되지 않을 것이라는 확신을 100% 확신 할 수 있다면 비트를 사용하십시오. 그러나 미래에 세 번째 가치가 나타나는 것을 볼 수 있다면 그 날이 Tinyint를 사용할 때 인생이 조금 쉬워 질 수 있습니다.

단지 생각이지만, 대부분의 행이 한쪽 또는 다른 줄로가는 것을 보지 않는 한 색인이 얼마나 좋은 지 색인이 당신을 얼마나 잘할 것인지 잘 모르겠습니다. 대략 50/50 배포에서는 실제로 테이블 쿼리에서 볼 때 보는 것보다 인덱스를 최신 상태로 유지하는 데 더 많은 히트를 취할 수 있습니다.

때에 따라 다르지.

selects의 속도를 최대화하려면 int (tinyint를 사용하여 공간을 절약)를 사용하십시오. 절은 int가 느려지는 곳 (int가 아니라 모든 밀리 초 카운트). 또한 열을 널하지 않도록하여 속도를 높이십시오. 아래는 실제 성능 테스트에 대한 링크입니다.이 테스트는 자체 데이터베이스에서 실행하고 NULLS, 색인을 사용하고 여러 열을 한 번에 사용하여 확장하는 것이 좋습니다. 집에서는 여러 비트 컬럼과 여러 개의 작은 작은 열을 사용하여 비교하려고 시도했으며 작은 컬럼이 더 빠릅니다.select count(*) where A=0 and B=0 and C=0). SQL Server (2014)는 비트 마스크를 사용하여 하나의 비교 만 수행하여 최적화 할 것이라고 생각 했으므로 3 배 더 빠르게해야하지만 그렇지 않았습니다. 인덱스를 사용하는 경우, 테스트에 사용 된 5000000 행 이상 (테스트에 사용 된)이 필요합니다.

https://www.mssqltips.com/sqlservertip/4137/sql-server-performance-test-for--bit-type-in-a-where-clause/

공간을 절약하려면 비트를 사용하려면 비트를 사용하십시오. 8 개는 하나의 바이트를 할 수있는 반면 8 개의 작은 바이트는 8 바이트를 제공합니다. 각 백만 행에 약 7 메가 바이트가 절약됩니다.

이 두 경우의 차이점은 기본적으로 무시할 수 없으며 비트를 사용하면 컬럼이 단지 깃발을 나타내는 신호의 상승이 있기 때문에 비트를 사용하는 것이 좋습니다.

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