NULL 이란?
📖 NULL은 구조적 질의언니(SQL)에서 데이터베이스 내의 데이터 값이 존재하지 않는다는 것을 지시하는 데 사용되는 특별한 표시어이다. (출처: 위키백과)
적혀있는 것처럼 NULL은 데이터가 존재하지 않는다는 것을 의미하며 알 수 없는 값이라는 의미 역시 가지고 있다.
숫자 0이나 String ' ' 도 아닌 단순히 '없음'인 것이다.
만약, NULL을 허용하도록 설정하면 값이 없을 경우 자동으로 NULL이 들어가게 되는데...!
쉬우면서도 어려운 존재가 이 NULL이라는 것이다.
그렇다면 왜 NULL을 피해야하는 걸까?
NULL은 프로젝트에서 의도치 않는 문제를 야기하기도 하는데
1. 수치 연산, 비교 연산 등 모두 NULL을 반환
2. 의도치 않은 검색 결과가 나오기도 함
3. 옵티마이저 구현에 악영향(성능↓)
1. 연산에서의 어려움
만약 사칙연산을 한다고 해보자.
답은 모두 NULL이다.
NULL 값은 알 수 없는 값이기 때문에 알 수 없는 값에 특정 값을 + , - , * , / 와 같은 사칙연산 하고 싶다고 해도 연산을 할 수 없는 것이다.
비교 연산 (=,>,>=,!=) 은?
역시 마찬가지로 NULL이 비교대상일 경우, 비교가 불가능하다.
번호에서 1번만 값이 나오고 2,3,4번은 비교가 불가하다..!
2. 의도치 않은 검색 결과
위 쿼리문에 대한 결과는 " 값이 NULL이 아닌 사람 중 나이가 20살이 아닌 사람" 이지만
실제로 원하는 결과는 "나이가 20살이라고 알려진 사람을 제외한 모든 사람" 이라면
위처럼 NUL에 대한 처리를 따로 진행해야 한다.
3. 옵티마이저 구현에 악영향
옵티마이저의 큰 역할은 쿼리의 실행이 최적의 성능을 내도록 바꿔주는 것이다.
그러나 NULL이 들어갈 경우, 수학적으로 증명할 수 있는 조합이 많이 줄어들어 옵티마이저가 별다른 일을 못하고 사람이 노력하여 직접 쿼리를 튜닝해야 한다.
이러한 쿼리의 재작성 뿐만 아니라 쿼리의 비용계산에서도 악영향이 있다.
NULL이 있는 인덱스 항목은 인덱스의 제일 앞 혹은 뒤에 몰아서 배치되는데 행이 늘어날 수록 IS NULL을 스캔하는 시간이 길어져 원하는 값을 출력하는데 더 긴 시간이 걸릴 수 있다.
결론
즉, NULL사용하지 않는 편이 좋지만 필요에 따라 또는 프로젝트 특성을 고려한 설계에 따라 사용은 할 수 있겠다.
*참고자료*
관계형 데이터베이스 실전 입문 - 07. NULL과의 싸움
강력한 데이터 모델인 관계형 모델이지만 SQL에서는 이를 아주 간단하게 파괴할 수 있는 것이 존재한다. NULL이다. 1. NULL RDB에서는 NULL을 피해야 한다고 알려졌다. 릴레이션에는 NULL이라는 개념이
www.sunny-son.space
데이터 베이스 NULL에 대한 기본적인 내용
이번 글에서는 NULL에 대한 기본적인 내용과 NULL에 대해 조심해야 할 점들을 간략히 적어보려고 한다. 이 글은 '개발자를 위한 인덱스 생성과 SQL 작성 노하우(이병국)'을 참고하여 작성하였다. 위
khdscor.tistory.com
왜 Null이 나쁜가? | Mimul Tech log
Null의 나쁜점에 대해 기술함.
www.mimul.com
Why NULL is Bad?
Why NULL is a terrible practice in object-oriented programming? Despite the fact that it is used a lot and everywhere, this article tries to explain why you should give up this bad habit.
www.yegor256.com
'프로젝트' 카테고리의 다른 글
웹소켓 연결, 끊김 감지 (feat. 채팅 목록 unreadCount 구현) (0) | 2025.01.31 |
---|---|
웹소켓 STOMP로 채팅구현하기 (with Spring) +웹소켓 테스트 사이트 추천 (0) | 2024.11.17 |
헥사고날 아키텍처? (Hexagonal Architecture) (1) | 2024.09.16 |
[로그인 인가 인증] Refresh Token Rotation (0) | 2024.08.16 |
[회고] 프로젝트 회고 <기록의 서재> (1) | 2024.08.11 |