데이터베이스 데이터 삭제 시 저장공간에 관련된 질문입니다. 0 1 1,160

by 김호식 [Oracle 기초] 삭제 공간 [2016.12.13 03:57:57]


데이터베이스 관련 질문있습니다.

<테이블>
          (INT, PK)         (VARCHAR)        (TEXT(12))
SequenceNumber | Name | Address | VerificationCode
           0                A       Korea        1abc2abc3abc
           1                B         US          3abc2abc1abc

다음과 같은 테이블이 있을 때,

1. Varchar 자료형은 저장할 때 해당 문자열의 길이를 표현하는 offset을 관리한다고 알고 있습니다. 이 때, A의 주소를 빈칸으로 update를 하면 offset은 0이 되고 문자열은 하나도 저장이 안되나요? 아니면 빈칸을 표현하는 다른 문자가 저장되나요?

2. Text 자료형인 A의 verification code를 빈칸으로 update한다면 12자리의 공간에 정말로 빈칸으로 저장되는 건가요? 아니면 빈칸임을 표시하는 다른 문자가 저장되나요?

3. 앞의 질문에서 빈 칸으로 만든다는 것이 의미상으로는 "해당 컬럼의 내용을 삭제한다" 를 의미합니다. 이 때, update문을 이용하여 빈 칸으로 만드는 거 외에 다른 방법이 있나요?

감사합니다.

by 아발란체 [2016.12.13 13:22:02]

1.

사용하던 공간 그대로 차지하고 있습니다.

 

2.

역시 비어 있는 공간으로 추후 다른 정책에 의해 그 공간이 사용 됩니다.

 

3.

레코드가 아닌 항목의 경우는 값의 삭제가 아닌 값을 업데이트 한다고 봐야하지 않을까 합니다.

 

항목 값을 계속 null 처리를 해줘야 하고 null 를 가진 레코드가 많아 질 수 있다면 설계상 테이블을 분리하여 one-one 관계로 둬야하지 않을까 합니다.

 

저장 공간 효율성과 관계가 있다면 

Index Skew 또는 Sparse 로 검색하여 내용이 조금 도움이 될 수 있을 것 같습니다.

 

얇은 지식으로 댓글 달았습니다... OTL

사용 블럭 효율을 관찰 할 수 있는 쿼리가 찾아보면 많습니다.

한번 추이를 보시는 것도 좋을 것 같습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입