개발자
ChatGPT에게 물어보니 null로 저장하는 것도 추가적으로 메모리가 필요하다고 얘기하는 데, false로 저장하는 것보다 조금 더 들 수 있다고 하네요. null보다 false로 저장하는 게 조금 더 효율적일 거라는데, 이게 사실인가요??
답변 1
조금 더 효율적일 수는 있는데, 의미있는 수준의 효율성라고 이야기하긴 어렵다고 생각합니다. Storage 차지 용량 관점에서는 데이터 100만건 당 1MB 정도 거든요. 구체적인 숫자는 Column 개수에 따릅니다. DB에서 NULL이 차지하는 용량에 대해서는 DB NULL Bitmap이라는 키워드로 찾아보시면 됩니다. MySQL, MongoDB 등 DBMS가 무엇인지에 따라 내용이 달라질 수 있습니다. 따라서 관심있는 DBMS를 선택하고 찾아보시면 좋을 것 같아요! 제가 알고 있는 MySQL 기준으로 설명드리겠습니다. 보통은 NULL Bitmap을 행 별로 저장합니다. 특히 NULL 허용 열이 하나라도 있으면 생성됩니다. 100개 데이터가 있다면 NULL Bitmap도 100개 있는거죠. 예를 들어 다음과 같은 테이블이 있다고 가정해보겠습니다. CREATE TABLE NULL_BITMAP_TESTS ( id INT NOT NULL AUTO_INCREMENT, info VARCHAR(1000) ); 이 경우 info 열이 NULL 허용이므로, 행 별로 NULL Bitmap이 생성됩니다. 현재 2개 열이 있으므로 NULL Flag를 위해 2비트를 필요로 합니다. 하지만 MySQL은 NULL Bitmap을 바이트 단위로 저장하기 때문에, 반올림해서 1바이트를 필요로 합니다. 만약 9개 열이라면 2바이트를 사용하는 식입니다. 만약 모든 열이 NOT NULL이라면, NULL Bitmap은 사용하지 않습니다. 불필요하기 때문이죠. 참고자료: https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html https://dba.stackexchange.com/questions/312507/storage-space-used-for-null-values
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 12월 27일
데이터베이스에서 boolean 타입의 기본값을 설정하는 것은 상황과 요구사항에 따라 다릅니다. NULL을 사용하는 이유는 '값이 없음' 또는 '알려지지 않음'을 나타내기 위함입니다. 그래서, 해당 필드가 아직 정의되지 않았거나 정보가 없는 경우 NULL을 사용하게 됩니다. NULL은 실제 boolean 값인 true/false 와는 별도로 취급됩니다. false를 기본값으로 사용하는 경우, 이것은 모든 레코드가 생성될 때 해당 필드를 false로 초기화한다는 것을 의미합니다. 따라서, 이 방법은 필드에 대한 명확한 값을 제공합니다. 메모리 사용량에 관해 말하자면, 데이터베이스 시스템에서 NULL 을 처리하는 방식에 따라 달라집니다. 어떤 시스템에서는 NULL 값을 저장하는 데 추가 메모리가 필요할 수도 있고, 다른 시스템에서는 그렇지 않을 수 있습니다. 하지만 일반적으로 이런 차이가 크게 성능에 영향을 주지 않습니다. 따라서 질문의 답변은 "사실이다"와 "그렇지 않다" 중간 정도입니다. 궁극적으로 데이터의 의미와 용도에 따라 boolean 필드의 기본값을 결정하면 됩니다. 그것이 NULL이든 false든 상관없습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!