의미없는 값은 null값이 좋을까요, 아니면 뭐라도 넣는것이 좋을까요 0 4 2,941

by 요루 의미없는값 NULL [2009.08.10 16:42:40]


 

컬럼에 들어가는 값중에 해당 사항이 경우를 표시해줘야할때가 있습니다.

 

예를들어...   

직업이 A이면 1번, B이면 2번을 넣는 컬럼에  A,B의 경우 모두에 해당하지  사람이 있을수 있습니다.

이럴때 이 컬럼에 NULL 값을 넣어주는게 좋을까요 아니면 해당없음을 뜻하는 3번이라는 값을 설정해서 넣어주는것이 좋을까요?

 

일반적으로 조회하거나,   COUNT 하게 될경우에 어떻게 쓰일지 나름대로 고민을 하고있습니다만 복잡하네요.

count를 만약 한다면 직업이 A인경우나 B인경우를 하지 해당없는 3번을 가지고 할일은 거의 없을것같습니다.

조회를 한다면 물론 해당없는 경우의 인원을 검색할때도 그 컬럼을 보여주긴 하겠구요.

 

제 생각엔 저 컬럼이 인덱스에 쓰인다면 3번이라고 넣어주는게 좋을것 같기도하고...

만약 인덱스로 안쓰인다면 NULL로 처리해놓는것이 count같은거할때 더 유리할것 같기도 하고..제가 생각하는것이 맞는지요?

by 손님 [2009.08.10 18:31:06]
coun,sum,min,max등.숫자 관련된것들은 보통 0으로 하지 않나요..?
null 보내면 처리하기 무쟈게 귀찬고;; 개발자는 널체크해야하고
널잘못근다리면 에러나고...
근대..뭐보다 어떤 용도로 쓰냐에 따라서.. 꼭 널을 보내야 한다면 널을 보내야 하는거 아닐가 생각합니다.
저는 응용프로그래머인대.널 싫어 합니다;

by 현 [2009.08.10 21:09:45]
count,sum,min,max등은 null이든 0이든 상관없습니다.
avg나 연산을 할 경우엔 null과 0은 차이가 있지요.
제가 보기엔,
글 올리신 님이 상황을 아주 정확하게 잘 보신것 같습니다.
null은 인덱스에 생성되지 않기 때문에 그 부분만 잘 주의하시고 오히려 그걸 잘 이용하신다면 효율적으로 잘 쓰실 수 있으리라 보여집니다..

by 박민석 [2009.08.11 10:23:05]
예전에 제가 사용했던 방법을 말씀드리면요..
NULL을 넣을 경우에는 예외부분이 전체 데이타중에 많은 부분을 차지 할때 많이 사용했습니다.
알고계시겠지만 NULL로 검색을 하게 되면 FULL SCAN을 하게 됩니다.
따라서 대체적으로 실제 INDEX로 검색되어야 하는 부분은 실제값을 넣고 FULL SCAN해야 하는 부분은 고의로 NULL로 변경하여 입력하는 경우도 있습니다.
요즘은 통계정보가 많이 정확해져서 특정값이 대부분의 분포를 차지하면 알아서 FULL SCAN을 타게 될겁니다.
그리고 님이 말씀하신것 처럼 실제 아무값도 없는 부분(실제로는 NULL이겠죠 ?^^)이 전체량에 비해 적은 분포를 차지하면 강제로 예외값을 하나 만들어서 넣기도 합니다. 검색 성능 향상을 위해서요..
즉 정리 하자면 A도 아니고 B도 아닌 사람이 전체량에서 어느 정도의 분포를 차지하는지 판단하시구요.. 또한 그런 사람에 대한 검색이 발생하는지도 판단하셔서 NULL 값을 넣을지 예외값 하나 만들어서 넣던지 하시면 됩니다.

by 요루 [2009.08.11 10:31:31]
세분 모두 감사합니다.
실제 데이터의 발생 경향을 좀더 검토해보겟습니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입