বিদেশী সম্পর্কে নিম্নলিখিত কোয়েরিটি ৩.২ মিলিয়ন সারিগুলিতে নির্বাহ করতে প্রায় 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
সত্যে স্থির হয়ে আমার উত্তরটি পেয়েছি , তবে এর কোনও ফল হয়নি had
প্রয়োজনে অবজেক্ট তৈরি করতে বিদেশী সার্ভারে আমার অ্যাক্সেস রয়েছে। ধারাটিতে টাইমস্ট্যাম্প মানটি WHERE
যে কোনও হতে পারে; এটি পূর্বনির্ধারিত মানগুলির তালিকা থেকে আসে না।
IntterraNearRealTimeUnitReflexes300sForeign
বনাম IntterraNearRealTimeUnitReflexes300s
এবং idx_incident_date_time_300
আমি অনুমান করি যে 300s একইরকম, তবে idx_incident_date_time_300
বিদেশী সার্ভারে সূচকটি বিদ্যমান কিনা তা পরীক্ষা করা উচিত