2010년 10월 28일 목요일

데이터타입의 중요성

오라클에서 테이블 생성시 무엇보다 중요한 부분인 데이터타입이 그 중요성만큼 깊은 고려의 대상인 아닌것 같습니다.

많은 개발자들이 그냥 NUMBER 타입을 선언하는 경우도 있고, 코드성의 숫자 형태를 무심코 VARCHAR2로 선언하는 경우도 있습니다.

이렇듯 테이블 생성시 컬럼의 데이터타입을 단순 데이터가 들어가면 된다라는 식으로 선언을 함으로써 데이터베이스 성능에 심각한 문제를 초래할 수 있는 테이블을 생성하고 있는 것을 많이 보았습니다.

데이터타입의 중요성에 앞서 VARCHAR 과 VARCHAR2의 차이점에 대해서 알아보겠습니다.

결과적으로는 VARCHA 과 VARCHAR2 는 아무런 차이가 없습니다. 모두가 4000 자까지 입력이 됩니다.

그럼 왜 오라클에서는 VARCHAR 이 있는데, VARCHAR2 를 만들었을가요? 그것은 ANSI SQL 에서 아직 VARCHAR 에 대한 정의를 내리지 못했기 때문입니다.

이말을 좀 풀어보겠습니다.

만약에 프로그램에서 4000자까지 입력을 받을 수 있는 항목이 있었습니다. 그리고 이 컬럼을 VARCHAR 로 선언을 했습니다.

그런데 ANSI SQL에서 VARCHAR 타입을 2000자 까지로 정한다라고 하면, 오라클에서 이후 버전에서는 VARCHAR 를 2000자 까지로 바꿔야 합니다.

그럼 VARCHAR 타입으로 선언을 한 테이블을 가진 프로그램이 오라클 상위버전으로 변환시 VARCHAR로 선언된 곳에서 에러가 발생한다는 것입니다.

이러한 이유로 오라클에서는 ANSI SQL에서 VARCHAR이 정해지지 전까지는 VARCHAR2를 사용하라는 겁니다.

ANSI SQL에서 VARCHAR를 정한다 하더라도 오라클에서는 VARCHAR2 에 대해서는 바꾸지 않을 것이기 때문입니다.

그럼 데이터타입에 대해서 자세히 알아보겠습니다.

간단히 숫자로 된 데이터를 VARCHAR2로 선언하는 것과 NUMBER로 선언했을 경우의 차이를 알아보겠습니다.

우선 NUMBER 타입은 아무런 값없이 그냥 NUMBER로 선언을 하면 NUMBER(22)로 선언되게 되어 있습니다.

그러므로 NUMBER 타입을 선언시 길이를 선언하는 것이 좋다고 보고, NUMBER 은 최대 38까지 선언 가능합니다.

그럼 VARCHAR2와 NUMBER 타입의 실제 길이에 대해서 알아보겠습니다.

어떤 컬럼에 데이터가 숫자의 형태로만 들어간다고 했을때 그 값이 1234567890 로 10개의 숫자 형태로 들어간다면 이 컬럼의 데이터 타입을 VARCHAR2 와 NUMBER 의 차이는 실제 데이터의 길이에서 차이가 납니다.

우선 VARCHAR2로 선언을 했을 경우 길이만큼인 10 BYTE 길이의 데이터가 들어가게 됩니다.

NUMBER로 선언을 했다면 10/2+1 인 6 BYTE 길이로 데이터가 들어갑니다.

두 타입의 차이로 4 BYTE 의 차이가 발생합니다. 이것이 별 차이가 없을 수도 있습니다.

하지만 데이터가 대용량으로 저장이 된다면, 만약 1000만건의 데이터가 저장이 된다면, 이 하나의 컬럼만으로도 40,000,000 BYTE 의 저장공간이 차이가 납니다.

다시 말해서 데이터 컬럼하나로 인해서 약 40M 의 저장공간이 차이가 난다는 것입니다.

이러한 이유로 데이터베이스의 테이블 설계시 컬럼의 데이터타입은 무엇보다 중요하다 할 수 있습니다.

그러므로 테이블 설계시 컬럼에 대한 데이터타입을 좀더 신중히 효율적으로 선언해야 합니다.

댓글 없음:

댓글 쓰기