Q&A

  • Field에 Null, Empty String...
테이블 사이즈가 궁금해서 그럽니다.

Field에 Null이 대입되어 있을 경우와 Empty String이 대입되어 있을 때 DB 사이즈가 달라지나요?

갑자기 궁금해 지네요...

그리고 사이즈 외에 다른 특이 사항이 있나요?
2  COMMENTS
  • Profile
    착한천사 2006.02.21 05:57
    착한천사 김경록입니다.

    개인 소견을 말씀드리겠습니다.
    지극히 개인적인 소견이므로, 틀리더라도 이해해 주시리라 믿겠습니다.
    간단히, 제일 만만한 Oracle 기준으로 말씀드리면,
    DB Size라 말씀하셨는데, Database의 물리적 Size인지
    논리적 Size인지 알고 싶구요..
    그냥, Table을 말씀하셨는지 아닌지도 알고 싶구요..
    뭐.. 더 알고 싶은게 있는게 질문이 길어지네요..

    개인적인 Size기준으로 생각하면,
    일단, Table과 Index, Metrialize View, Function,Procedure,View 기타등등
    이 있습니다만.
    Size와 관련된 것은 대부분이, Table,Index Merialize View등등에 해당된다고 생각합니다.
    이유는 Storage 옵션이 들어가기 때문이구요..
    Table,Index 같은 경우는 반드시 PCTFREE를 명시해야만 하는데..(뭐 Default로 들어가긴 하지만..)
    이것은 1 Block의 사이즈에 어느정도의 여유공간을 주느냐의 문제로 판단됩니다.
    따라서, 여유공간을 두긴 두는데, Varchar같이 가변길이형같은 것은 1 Block의 길이에 어느정도
    들어가고, 만약 들어가지 않는다면, 그 공간만큼 여유가 남는다고 판단됩니다.
    따라서, Null 또는 Empty String이 들어간다면,
    1 Block의 공간이 남게 되어 1 Block의 사용빈도가 상대적으로 높아지므로
    공간효율은 좋아진다고 말할 수 있겠습니다만, Size와는 별개의 문제라고 판단됩니다.
    왜냐하면, 1개의 Block은 그 공간의 유한하며, PCTFREE로 여유공간을 명시하였으므로
    어느정도밖에 Data가 들어가지 않는다고 판단됩니다..
    이때, 1 Block의 여유공간비율이 PCTFREE에 도달하게 되면 다른 Block에 들어가게 되고..
    그러면, 자동으로 Extention이 발생된다 하겠습니다.

    결과적으로 볼때, Empty String과 Null은 공간효율을 좋게 할 수는 있고, Extention이 작게 이루어져
    많은 Row가 1 Block에 들어가게끔 되어 좋아지지만,
    해당 Table,Index의 Insert/Update 빈도수에 따라서 달라진다고 판단하고 있습니다.
    왜냐하면, Chain이 발생될 수 있기 때문이면, 많은 Chain의 발생은 DB의 I/O를 높여 Performance를
    떨어뜨리는 요인이 되기 때문입니다.
    (이것은 해당 Table과 Index등등 Object들의 활용특성에 따라 달라지므로
    약간씩 견해가 달라질 수 있다는 뜻도 포함됩니다,
    즉, Index에는 특수한 Index를 제외하고 NULL과 Empty String이 들어가지 않기 때문입니다.)

    생각되로 주섬주섬 꺼낸 내용이므로 두서가 맞지 않다고 해도..
    대~~충, 대~~충 이해해 주시리라 판단하겠습니다.


  • Profile
    KDDG_Apine 2006.02.13 23:06


    형님 만큼 잘 아는분이 있을지....   저는 그런거 별로 신경 안쓰는데..