[오라클] null의 특성 및 null 체크함수 > db

본문 바로가기

db

[오라클] null의 특성 및 null 체크함수

페이지 정보

작성자 서방님 댓글 0건 조회 22회 작성일 08-12-29 16:49

본문

null이란것은 상당히 애매한 넘이다.

웹에서 좋은 글들을 보아서 간만에 짜집기 해보았다 -_-v

 

null 의 특징은...


1. sum, count 등 집합함수나 연산시 null과의 연산은 null 이 됩니다.

즉, null 인 컬럼값에 100을 더하면 100이 되는게 아니라 null 이 됩니다.

select null + 100 from dual 의 결과는 null 이 됩니다.

null은 알 수 없는 값이기 때문에 '알지 못하는 값' 과의 연산은  '알지못하는값' 이 됩니다.

그리고 select count(salary) from emp 등에서 만약 salary 에 null 값이 들어있다면 null인 경우는 빼고 count를 합니다.


따라서 개발자들은 이러한 null 값 때문에 연산을 하거나 avg, sum등을 구할때 결과가 나오지 않는

상황을 경험하고는 null 공포증을 가지게 됩니다. 그래서 nvl을 남발하게 되는거구요.


따라서 위의 경우와 같이 EMP(사원) 테이블의 연봉(salary)같이 연산이 예상되는 숫자형 같은 경우는 특히 주의하여 DB 설계자가 'not null default 0' 로 셋팅해주는 것이 좋습니다.


2. NOT NULL로 설정하면 오라클이 내부적으로 인덱스를 생성해서 관리하나요? 그럼 업무로직상 반드시 값을 가지고있어야 하는 필드를 NOT NULL로 설정하면 INSERT/UPDATE할때 인덱스를 관리하는 시간때문에 속도가 느려지나요?

오라클에서 색인(B*Tree) 구성시 null은 빠집니다.

만약 where 조건에서   salary is null 이라는 조건으로 들어오면

null 은 색인 구성에서 빠지므로 이 조건은 색인을 활용할 수가 없게 됩니다.

-> NOT NULL 설정되었다고 인덱스하고는 관계가 무관합니다.


3. 업무로직상 반드시 값을 가지고있어야 하는 필드는 NOT NULL로 하는게 좋은가요? 아니면 INSERT할때 NULL여부를 검사해서 INSERT하는게 좋은가요?

-> NOT NULL이 더 좋습니다. 이는 차후 이 컬럼절에 대하여 정렬(조건절 제외)을 하였을 경우

일반 인덱스를 주면은 SORT영역없이 인덱스를 사용하여 성능에 상당한 영향을 줍니다. NULL은

인덱스에 값이 없기 때문에 정렬(조건절제외)시  인덱스를 사용못합니다.


nvl : 컬럼값이 null일 때, 다른 값으로 바꾸는 기능입니다
nvl 컬럼은 기본적으로 두개의 데이터 타입이 같아야 합니다 .

last_no 컬럼이 숫자이면

nvl( last_no , 0)

last_no 컬럼이 문자이면

nvl( last_no , '0') 이렇게 해주시면 됩니다.

 

댓글목록

등록된 댓글이 없습니다.

Total 447건 1 페이지
게시물 검색

회원로그인

접속자집계

오늘
174
어제
365
최대
592
전체
40,148

그누보드5
Copyright © seobangnim.com All rights reserved.
자바스크립트를 활성화 하세요![ 브라우저에서 자바스크립트를 활성화하는 방법 ]