2016-06-13 3 views
0

PostgreSQL 9.4에는 checked_at 타임 스탬프 필드와 check_interval 정수 필드가있는 테이블이 있습니다.PostgreSQL에서 수학을위한 인덱스 사용

나는 멀티 컬럼 인덱스가이 쿼리의 속도를 향상 사용겠습니까 행만

WHERE checked_at > NOW() - INTERVAL check_interval || ' minutes'를 반환해야합니까? 아니면 최적화 할 다른 방법이 있습니까?

테이블은 아직 설계되었지만 궁극적으로 약 5-10 백만 건의 레코드를 검색 할 것으로 예상됩니다.

+1

인덱스를 사용할 수 있습니다. 특정 쿼리에 문제가있는 경우 https://wiki.postgresql.org/wiki/Slow_Query_Questions를 읽으십시오. –

+1

@horse_with_no_name식이 check_interval에 종속되어 있으면'checked_at'의 인덱스로 충분하지 않습니다. 같은 행. –

답변

2

여러 열 인덱스는 도움이되지 않지만 식의 인덱스는 도움이됩니다. 당신이 당신의 쿼리를 변경하는 경우 :

SELECT * 
FROM tbl 
WHERE (checked_at + (check_interval * (INTERVAL '1 minute'))) < NOW(); 

을 당신이 충분해야 checkted_at``에 인덱스를

CREATE INDEX jbk_tbl_checkedat_checkinterval_ex ON tbl((checked_at + (check_interval * (INTERVAL '1 minute'))))