문자타입에 PK값 사용 이유와 WHERE 절에 들어가는 IS NULL 고찰
우선 쿼리문을 봐야할것이다.
(SELECT lpad(max(a.memberPK)+1,10,'0') as memberPK FROM invite_M a)
이와같은 방식으로 얻어낼수있 는값은 0000000001 값이다.
실무에 있어서 다음과 같은 방식에 의문점과 최근 강연에서 듣게된 WHERE 절에 사용되는 IS NULL 그리고 INT 형태의 최대값
개인적 의문점에 대해서 정리를 해봤다.
첫번째 . PK 값에 오토 인크리먼트나 시퀸스(오라클) 를 사용하지 않고 문자타입을 사용하는 이유 .?
두번째 . 최초 더미 자료를 입력하는 방식에 대한 문제점 해결 방안은 없는것인지.?
세번째. WHERE 절에 사용하는 IS NULL 보다 유니크한 default 값을 넣어서 처리하는것이 좋은지.?
네번째. mysql 에서 INT 형태가 담을수있는 정수의 최대값 과 JavaScript 에서 var 에 담을수있는 최대 정수값?
네번째 질문은 티스토리 블로그를 참고하였고 , 나머지 3개의 질문은 구루비를 통해 해결하였다.(답변 달아주신 마농님 jkson님 감사 합니다.)
1. PK 값에 오토 인크리먼트나 시퀸스(오라클) 를 사용하지 않고 문자타입을 사용하는 이유 .?
- 대부분의 경우 관습
- 초정밀을 요하는 수치 계산에서 한계치 이상의 수를 사용하기 위해 문자형 사용
- 시퀀스 사용시 중간에 번호가 비는 현상, 순서가 뒤바뀌는 현상 등을 해소하기 위함
- 단순 숫자가 아닌 의미있는 문자 조합인 경우에도 사용.(예 : 년도 + 순번)
우리 회사의 경우 첫번째 이유와 세번째 이유에서인것같다.
2. 최초 더미 자료를 입력하는 방식에 대한 문제점 해결 방안은 없는것인지.?
정답은 가까운곳에 있다고 했던가. ORACLE 에서 GROUP BY 를 하기위해 SELECT 절에 자주 사용하였던 NVL 함수를 이용하여 바로 적용시킬수 잇었다.
3. WHERE 절에 사용하는 IS NULL 보다 유니크한 default 값을 넣어서 처리하는것이 좋은지.?
상황에 따라 다르다는 표현이 가장적절한것같다. 항상 플랜A가 상황에따른 최선의 선택이 될수없다는것이다.
답변에 따르면 널값에 비율에 따라 상황이 달라질수있는것인데
대부분의 값이 널인 경우라면 ? 인덱스를 이용하는것보다 풀스캔이 유리하다. 여기에 기본값을 지정한다면 인덱스 크기가 증가해 공간 낭비 및 인덱스 관리 비용이
증가한다. 널값 검색뿐만이아니라 널이 아닌 값 검색까지도 고려해야 하는데 이경우엔 인덱스 크기가 커졌음으로 널이 아닌 값 검색 효율이 떨어진다.
정리하자면 널값비율이 높다면 풀스캔 ( 이유 : 인덱스 크기 증가 , 관리비용 증가 , 다른값들의 검색 효율 감소 )
극히 일부값이 널인 경우라면 ? 강연자가 했던 말처럼 기본값을 지정해 인덱스 검색하는것이 유리하다.
즉 상황이라는것은 NULL 값에 분포도를 봐야한다는것이다.
4.mysql 에서 INT 형태가 담을수있는 정수의 최대값 과 JavaScript 에서 var 에 담을수있는 최대 정수값?
mysql 에서 INT 의 최대값 은 4,294,967,295 반올림하여 약 42억을 쓸수있었고 (http://mjupi.tistory.com/9 : 참고 )
JavaScript 에서 var(variable) 에 담을수있는 최대값은 7976931348623157e+308 (http://lambdaexp.tistory.com/59 :참고 ) 이였다.
Node.js 를 이용하는 환경이기 때문에 서버사이드에서 디비값을 연동해 가져오게되면 var 에 담길수있는 최대값이 궁금했었다.
세상은 넓고 배울것이 많다는게 즐겁다. : )