2012-10-10 3 views
1

나는 작업이 다음과 같이 선택MySQL의 INT는

... WHERE status = FINISHED ... 
... WHERE status = DELETED ... 

2.

,691,363,210

도 4 선택한 다음 부울 필드

를 분리하고 난 저장할 수

... WHERE finished_field = True ... 
... WHERE deleted_field = True ... 

을하는 경우는 1 또는 2 (선택 용) 성능의 개선이며 nessesary 필드에 대한 인덱스를 생성 않는다 케이스 2?

+1

4 비트 필드를 사용하지 마십시오. –

+1

이것은 문제가되지 않을 가능성이 높습니다. 수십억 개의 레코드가 없으면 성능 차이는 생각할 가치가 없을 것입니다. 나는 단지 [SET] (http://dev.mysql.com/doc/refman/5.1/en/set.html)을 사용하고 그것으로 끝내라고 말하고 싶다. –

답변

0

성능 측면에서 어떤 차이가 있는지 모르겠지만 유지 관리 측면에서는 각 상태에 대한 열이 아닌 다른 값을 가질 수있는 단일 상태 필드를 사용하는 것이 좋습니다. 내일 새로운 상태가 필요한 경우 두 번째 옵션을 사용하면 테이블 스키마를 변경해야하지만 첫 번째 옵션을 사용하면 새로운 상태 식별자 (예 : "RESTORED = 5") 만 사용해야합니다.

0

성능은 문제가되지 않습니다. 더 중요한 것은 데이터베이스 설계입니다. 4 비트 필드를 사용하는 경우 1보다 많은 상태를 true으로 설정할 수 있습니다. 그렇게해서는 안됩니다. 트리거를 사용하여이를 방지 할 수 있지만 상태가 하나뿐이므로 하나의 상태 필드를 갖는 것이 더 좋습니다.

그런 식으로 여러 필드를 결합 할 필요가 없습니다.

0

첫 번째 옵션은 해당 필드를 인덱싱 할 수 있으므로 더 나은 성능을 얻을 수 있습니다. 부울 필드를 인덱싱하는 것은 다른 값이 충분하지 않으므로 아무런 효과가 없습니다. MySQL은 해당 인덱스를 무시합니다.

하나의 필드를 사용하면 인덱스가 실제로 사용될 확률이 높아집니다.

마지막으로 몇 가지 실제적인 고려 사항이 있습니다. 첫 번째 옵션을 사용하면 다른 유형의 상태를 더 쉽게 추가 할 수 있습니다. 하나의 레코드가 하나의 상태 만 가질 수 있고 테이블의 크기가 더 작아 지도록합니다.