PostgreSQL
PostgreSQL은 기본키에 널 값을 넣을 수 없다. MySQL, 액세스와 마찬가지로 모든 널 값이 동일하지 않다고 처리한다. 따라서 유일 인덱스를 만든 후 유일 인덱스 컬럼에 널 값을 여러 개 넣을 수 있다.
PostgreSQL은 인덱스에 널 값을 포함할 수 있지만, 코드 2-7과 같이 WHERE 절에 조건을 정의하는 방식으로 널 값을 제외할 수도 있다.
코드 2-7 PostgreSQL에서 인덱스를 만들 때 널 제외 처리
CREATE INDEX CustPhone_IDX
ON Customers (CustPhoneNumber)
WHERE CustPhoneNumber IS NOT NULL;
SQL Server와 유사하게 PostgreSQL도 길이가 0인 문자열을 NULL이나 그 반대로 자동 변환하지 않으며, 이 둘을 다른 값으로 인식한다.
핵심 정리
• 인덱스로 만들 컬럼에 널 값을 허용할지 고려해야 한다.
• 널 값을 검색하고 싶은데 컬럼 값의 대다수가 NULL이라면, 이 컬럼은 인덱스로 만들지 않는 것이 낫다. 이때는 테이블을 재설계하는 편이 좋다.
• 컬럼에 있는 값을 좀 더 빠르게 검색하고 싶은데 값의 대다수가 NULL이라면, 데이터베이스가 지원하는 한 널 값을 제외하고 인덱스를 만드는 것이 좋다.
• 모든 데이터베이스 시스템은 각기 다른 방식으로 인덱스에 널 값을 넣을 수 있도록 지원한다. 널 값이 포함될 수 있는 컬럼을 인덱스로 만들기 전에 사용 중인 데이터베이스 시스템이 이 기능을 지원하는지 반드시 확인한다.