외국인에 대한 다음 쿼리는 320 만 행에서 실행하는 데 약 5 초가 걸립니다.
SELECT x."IncidentTypeCode", COUNT(x."IncidentTypeCode")
FROM "IntterraNearRealTimeUnitReflexes300sForeign" x
WHERE x."IncidentDateTime" >= '05/01/2016'
GROUP BY x."IncidentTypeCode"
ORDER BY 1;
일반 테이블에서 동일한 쿼리를 실행하면 0.6 초로 반환됩니다. 실행 계획은 상당히 다릅니다.
일반 테이블
Sort (cost=226861.20..226861.21 rows=4 width=4) (actual time=646.447..646.448 rows=7 loops=1)
Sort Key: "IncidentTypeCode"
Sort Method: quicksort Memory: 25kB
-> HashAggregate (cost=226861.12..226861.16 rows=4 width=4) (actual time=646.433..646.434 rows=7 loops=1)
Group Key: "IncidentTypeCode"
-> Bitmap Heap Scan on "IntterraNearRealTimeUnitReflexes300s" x (cost=10597.63..223318.41 rows=708542 width=4) (actual time=74.593..342.110 rows=709376 loops=1)
Recheck Cond: ("IncidentDateTime" >= '2016-05-01 00:00:00'::timestamp without time zone)
Rows Removed by Index Recheck: 12259
Heap Blocks: exact=27052 lossy=26888
-> Bitmap Index Scan on idx_incident_date_time_300 (cost=0.00..10420.49 rows=708542 width=0) (actual time=69.722..69.722 rows=709376 loops=1)
Index Cond: ("IncidentDateTime" >= '2016-05-01 00:00:00'::timestamp without time zone)
Planning time: 0.165 ms
Execution time: 646.512 ms
외국 테이블
Sort (cost=241132.04..241132.05 rows=4 width=4) (actual time=4782.110..4782.112 rows=7 loops=1)
Sort Key: "IncidentTypeCode"
Sort Method: quicksort Memory: 25kB
-> HashAggregate (cost=241131.96..241132.00 rows=4 width=4) (actual time=4782.097..4782.100 rows=7 loops=1)
Group Key: "IncidentTypeCode"
-> Foreign Scan on "IntterraNearRealTimeUnitReflexes300sForeign" x (cost=10697.63..237589.25 rows=708542 width=4) (actual time=1.916..4476.946 rows=709376 loops=1)
Planning time: 1.413 ms
Execution time: 4782.660 ms
나는이 GROUP BY
조항에 대해 높은 가격을 지불하고 있다고 생각하는데, 나는 이 때 외국 서버로 전달되지 않습니다 EXPLAIN VERBOSE
.
SELECT
"IncidentTypeCode"
FROM
PUBLIC ."IntterraNearRealTimeUnitReflexes300s"
WHERE
(
(
"IncidentDateTime" >= '2016-05-01 00:00:00' :: TIMESTAMP WITHOUT TIME ZONE
)
)
700k 행을 반환합니다. 이 주위에 방법이 있습니까?
나는 어제이 문서 페이지를 읽는 데 많은 시간을 보냈고, use_remote_estimate
true 로 설정 하여 답을 찾았다 고 생각 했지만 아무런 효과가 없습니다.
필요한 경우 외부 서버에 액세스하여 객체를 만들 수 있습니다. WHERE
절의 타임 스탬프 값은 무엇이든 가능합니다. 사전 정의 된 값 목록에서 제공되지 않습니다.
IntterraNearRealTimeUnitReflexes300sForeign
대 IntterraNearRealTimeUnitReflexes300s
하고 idx_incident_date_time_300
나는 300S의 사람이 같은 추정하지만, 경우에 그것은 가치가 확인 될 수 idx_incident_date_time_300
인덱스가 외국 서버에있는