एक विदेशी पर निम्नलिखित प्रश्न को 3.2 मिलियन पंक्तियों पर अमल करने में लगभग 5 सेकंड लगते हैं:
SELECT x."IncidentTypeCode", COUNT(x."IncidentTypeCode")
FROM "IntterraNearRealTimeUnitReflexes300sForeign" x
WHERE x."IncidentDateTime" >= '05/01/2016'
GROUP BY x."IncidentTypeCode"
ORDER BY 1;
जब मैं सामान्य टेबल पर उसी क्वेरी को निष्पादित करता हूं, तो यह 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
सत्य के साथ सेट कर लिया है, लेकिन इसका कोई प्रभाव नहीं पड़ा।
यदि आवश्यक हो तो वस्तुओं को बनाने के लिए मेरे पास विदेशी सर्वर तक पहुंच है। WHERE
क्लॉज में टाइमस्टैम्प का मूल्य कुछ भी हो सकता है; यह पूर्वनिर्धारित मूल्यों की सूची से नहीं आता है।
IntterraNearRealTimeUnitReflexes300sForeign
बनाम IntterraNearRealTimeUnitReflexes300s
और idx_incident_date_time_300
मुझे लगता है 300s लोगों ही कर रहे हैं, लेकिन अगर इसके लायक जाँच हो सकता है idx_incident_date_time_300
सूचकांक विदेशी सर्वर पर मौजूद है