2013-08-26 2 views
0

두 개의 테이블, 사용자 및 트랜잭션이 있습니다. 두 테이블 모두에서 행에는 타임 스탬프가 있습니다.PostgreSQL에서 테이블 간 타임 스탬프 차이를 인덱싱 할 수 있습니까?

복잡한 쿼리를 실행할 때 성능 문제가 발생합니다. 트랜잭션 날짜가 사용자 경험의 어떤 시점에서 반영 될지 (즉, 사용자가 가입 한 후 거래가 처리 된 후 며칠이 경과했는지) 반영됩니다.

이 "표준화 된 일"측정 내가 쿼리의 속도를 높일 수이 있도록 인덱스에있는 방법이 있습니까

ceil(extract(days from T.tdate - U.created_at)) +1 

과 같이 계산된다?

답변

2

이러한 인덱스를 직접 만들 수있는 방법은 없습니다.

수식의 값을 저장할 T 테이블에 다른 필드를 추가 할 수 있으며 해당 필드에 인덱스를 추가 할 수 있습니다. 트리거를 사용하여 해당 필드의 값을 유지할 수 있습니다.

2

아니오 : PostgreSQL에서는 currently을 사용하지 않으므로 둘 이상의 표를 참조하는 색인을 만들 수 있습니다.

또는 당신 수 : 삽입에 타임 스탬프 차이를 계산하기 위해 트리거를 사용

  • 따르 maniek의 제안/테이블 모두에 업데이트됩니다.
  • Postgresql 9.3의 CREATE MATERIALIZED VIEW을 사용하면 뷰의 결과 집합의 스냅 샷을 가져 와서 테이블로 저장할 수 있습니다. 이 스냅 샷 이후의 소스 테이블 변경 사항은 자동으로 포함되지 않습니다. REFRESH MATERIALIZED VIEW을 사용하여 업데이트 된 스냅 샷에 대한 보고서를 생성하기 직전에이보기를 업데이트 할 수 있습니다.
관련 문제