9.8 데이터 타입

  • 적절치 않은 데이터타입을 선택하면 데이터의 무결성이 손상될 수 있으며 데이터 저장 공간을 많이 차지하고 성능이 저하될 수 있다


데이터 타입 선정 원칙

  • 속성에 저장될 데이터의 성격에 맞는 타입을 결정
  • 날짜면 DATE , 숫자는 Number , 문자면 Varchar2 사용이 원칙
  • 날찌를 저장히는 속성에 Date 티입 대신 Varchar2(8) 타입을 사용하면 옵티마이저가 최적의 판단을 할 수 없도록 한다
  • (예를 들어 '2020년12월31일' 과 '2021년1월1일' 사이의 값을 조회할때 Date 타입과 비교하면 덜 효율적일 수 있다. )


데이터 타입 선정 절차

  • 데이터 성격은 숫자지만 종류가 한정돼 있다면 문자타입(코드화)으로 결정히는 것이 좋다
  • 고정길이 일지라도 실제로 Char 타입을 시용히는 예는 드물다. ( 조회시 문제를 일으킬수 있다. 무엇보다 Varchar2 타입에 비해 뚜렷한 장점은 없다.)
  • 최대 길이 가 4000 ~5000 정도로 매우 길어야 하면 Clob 등의 타입을 사용


CHAR/VARCHAR2 타입

  • 속성에 저장될 데이터가 문자이며 고정 길이일 때는 Char 타입을 시용히고, 가변 길이일 때는 Varchar2 타입을 사용히는 것이 원칙이지만 Char 타입을 시용한 때는 사실상 거의 없다.
  • 만일 char 4자리값에 3자리의 값이 들어간다면 블랭크(Space)가 입력된다 , 후에 업무규칙이 변경되 자리수가 바뀌면 블래크도 조회에 포함애야한다. (예: where 부서코드 like '123%' )
  • 무의미하게 최대 길이가 사용된 속성의 로우체인 현상도 고려해야한다.
  • update시 커진 데이터에 따라 로우 마이그레이션 현상도 고려
 
Row Chaining 과 Row Migration

Row Chaining

  - Row Chaining은 DB_BLOCK_SIZE보다 너무 큰 데이터가 들어왔을 경우 인접한 다른 블록까지 데이터가 쓰여지는 것을 말합니다. 
    이 데이터 블록은 원래 블록과 연결 되어 집니다.

  - Row Chaining은 블록이 하나의 I/O 작업과 동일한 양을 수행하기 위해 두 개의 I/O를 사용해야 하므로 성능상의 부하를 줍니다.

Row Migration

  - UPDATE시 로우에 저장된 Data의 양을 증가시켜 더 이상 그 블록에 저장될 수 없을경우 새로운 Block으로 데이터를 완전히 옮기는데 
    이를 Row Migration 이라고 합니다.

  - 즉 Update시 공간이 부족할 때 발생하며, Data 행을 완전히 채울 수 있는 새로운 Block 에 저장 됩니다


Number 타입

  • 속성에서 관리할 데이터가 숫자일 때는 Number 타입을 시용한다.
  • Number 타입은 최대 38자리의 양수와 음수를 저장
  • Number 타입으로 저장되는 데이터는 가변 길이 데이타.
  • 일반금액은 15 ~ 18 자리 사용이 무난
  • VARCHAR2보다 NUMBER가 공간을 덜차지한다.
  • Number 타입은 원칙적으로 전체 자릿수 (Precision)와 소수점 자릿수(Scale)를 지정해 Number(15,3)과 같이 사용해야한다
  • 소수점 이히는 반올림 돼 저장되므로 Scale을 주의해 결정해한다.
  • Precision과 Scale을 지정히지 않고 Number 타입에 저징히면 12345.67로 저장되는데,
    만약 1/3과 같은 계산 값이 저징되면 소수점 이하가 30여 자리까지 3으로 채워진다.
  • 고객번호와 같은 주식별자를 number 타입 로 사용시 고정길이므로 '10000000001' 과 같이 사용한다.
  • Like 검색이 많을 경우 VARCHAR2가 유리


DATE 타입

  • 일자나 일시는 Date type이 원칙이다.
  • Date type은 물리적으로 7Byte 사용 ( Varchar2는 짧아도 8byte 초까지면 14byte)
  • 검색시 Varchar2는 옵티마이져가 최적의 판단을 못함 ( index를 못타고 full table scan 발생할수도 있음)


CLOB, BLOB 타입

  • 대량의 문자 데이터를 저징하려면 Clob(Character Large Object) 타입을 사용
  • Clob , Blob 타입은 최대 4Gbyte까지 저장
  • 그리고 이미지 파일이나 문서 파일과 같은 이진 바이너리 파일을 저장하려면 Blob(Binary Large Object) 타입을 사용
  • Lob 타입을 사용한 컬럼은 주키 (PK)로 사용할 수 없으며 Order By, Group By 사용못함
  • Lob 타입과 같은 대용량의 데이터는 버퍼 캐시 (Buffer Cache)를 점유히는 것을 예방하기 위해 NOCACHE(default) 옵션을 사용한다