PostgreSQL 9.2 ব্যবহার করে, আমার তুলনামূলকভাবে বড় টেবিলের (200+ মিলিয়ন সারি) ধীর প্রশ্নগুলির সাথে ঝামেলা আছে। আমি ক্রেজি কিছু চেষ্টা করছি না, কেবল historicতিহাসিক মান যুক্ত করছি। নীচে কোয়েরি এবং ক্যোয়ারী প্ল্যান আউটপুট রয়েছে।
আমার টেবিল বিন্যাস:
Table "public.energy_energyentry"
Column | Type | Modifiers
-----------+--------------------------+-----------------------------------------------------------------
id | integer | not null default nextval('energy_energyentry_id_seq'::regclass)
prop_id | integer | not null
timestamp | timestamp with time zone | not null
value | double precision | not null
Indexes:
"energy_energyentry_pkey" PRIMARY KEY, btree (id)
"energy_energyentry_prop_id" btree (prop_id)
"energy_energyentry_prop_id_timestamp_idx" btree (prop_id, "timestamp")
Foreign-key constraints:
"energy_energyentry_prop_id_fkey" FOREIGN KEY (prop_id) REFERENCES gateway_peripheralproperty(id) DEFERRABLE INITIALLY DEFERRED
2012-01-01 থেকে এখন অবধি ডেটা রয়েছে, প্রতিনিয়ত নতুন ডেটা যুক্ত করা হচ্ছে। prop_id
বিদেশী কীতে প্রায় 2.2k স্বতন্ত্র মান রয়েছে , সমানভাবে বিতরণ করা হয়।
আমি লক্ষ্য করেছি যে সারিটির প্রাক্কলনগুলি খুব বেশি দূরে নয়, তবে ব্যয়ের অনুমান 4x ফ্যাক্টর দ্বারা বড় বলে মনে হচ্ছে। এটি সম্ভবত কোনও সমস্যা নয়, তবে এটি সম্পর্কে আমি কি কিছু করতে পারি?
আমি আশা করি যে ডিস্ক অ্যাক্সেস সমস্যা হতে পারে, যেহেতু টেবিলটি সর্বদা স্মৃতিতে থাকে না।
EXPLAIN ANALYZE
SELECT SUM("value")
FROM "energy_energyentry"
WHERE
"prop_id"=82411
AND "timestamp">'2014-06-11'
AND "timestamp"<'2014-11-11'
;
Aggregate (cost=214481.45..214481.46 rows=1 width=8) (actual time=51504.814..51504.814 rows=1 loops=1) -> Index Scan using energy_energyentry_prop_id_timestamp_idx on energy_energyentry (cost=0.00..214434.08 rows=18947 width=8) (actual time=136.030..51488.321 rows=13578 loops=1) Index Cond: ((prop_id = 82411) AND ("timestamp" > '2014-06-11 00:00:00+00'::timestamp with time zone) AND ("timestamp" < '2014-11-11 00:00:00+00'::timestamp with time zone)) Total runtime: 51504.841 ms
এটি কীভাবে দ্রুত করা যায় তার কোনও পরামর্শ?
আমি ঠিক শুনেছি আমি অদ্ভুত কিছু করি নি।
prop_time_idx
, তবুও সারণির সংজ্ঞা দেখায় entry_prop_id_timestamp_idx
। এটি কি একই সূচক? ঠিক করুন
prop
)? যদি মাত্র একটি সামান্য শতাংশ, তবে একটি সূচক ("timestamp", prop)
আরও ভাল হবে। একই নেতৃস্থানীয় কলাম (গুলি) সহ একাধিক সূচী ( prop
আপনার ক্ষেত্রে) এছাড়াও প্রায়শই নিষ্প্রয়োজন।