timestamp 자료형을 사용할 때 null 값은 인덱스를 사용해서 찾지 못한다는 사실을 알았네요. (약 3년전에 알았던 내용인데, 까먹었다가 오늘 다시 알게 되어서 이번에는 안 까먹으려고 남겨둡니다)
create table t (
주문번호 int,
승인날짜 timestamp
);
create index t_승인날짜_i on t (승인날짜);
이런 테이블이 있을 때,
'아직 승인되지 않았는 주문을 찾아라'는 쿼리를
select * from t where 승인날짜 is null
이놈을 사용하면 될 것이다고 생각했었는데, 이게 아니였군요. :(
즉, PostgreSQL 에서는 인덱스를 사용하려면 어떤값이 반드시 있어야합니다.
승인되지 않았는 자료는 '0001-01-01 00:00:00' 형태일지라도 어떤 값이 있어야하네요.
즉, select * from t where 승인날짜 = '0001-01-01 00:00:00'
이런 형태여야합니다.
3년전에 이렇게 만들어놓고는 이번에 스키마 수정하면서 응용프로그램 쿼리가 지저분해 진다고 null 로 바꾸었더니만 .... 아무튼 머리가 나쁘면 손발이 고생하는 것은 분명한 것 같습니다.
|