আমার কাছে প্রচুর সন্নিবেশ সহ একটি টেবিল রয়েছে, যা ক্ষেত্রগুলির একটি ( uploaded_at
) এ সেট করে NULL
। তারপরে একটি পর্যায়ক্রমিক টাস্ক সমস্ত টিপল নির্বাচন করে WHERE uploaded_at IS NULL
, সেগুলি প্রসেস করে এবং uploaded_at
বর্তমান তারিখে সেট করে আপডেট করে ।
আমি টেবিলটি কীভাবে সূচক করব?
আমি বুঝতে পারি যে আমার মতো আংশিক সূচি ব্যবহার করা উচিত:
CREATE INDEX foo ON table (uploaded_at) WHERE uploaded_at IS NULL
বা স্মেথ যে। আমি একটু যদিও বিভ্রান্ত যদি এটি একটি ক্ষেত্র সর্বদা যে সূচক সঠিক আছি NULL
। বা বি-ট্রি সূচক ব্যবহার করা যদি সঠিক হয়। হ্যাশটি আরও ভাল ধারণার মতো দেখায় তবে এটি অপ্রচলিত এবং হট স্ট্যান্ডবাইয়ের প্রতিরূপ স্ট্রিমিংয়ের মাধ্যমে প্রতিলিপি করা হয় না। যেকোন উপদেশ সাদরে গ্রহণ করা হবে।
আমি নিম্নলিখিত সূচকগুলির সাথে কিছুটা পরীক্ষা করেছি:
"foo_part" btree (uploaded_at) WHERE uploaded_at IS NULL
"foo_part_id" btree (id) WHERE uploaded_at IS NULL
এবং ক্যোয়ারির পরিকল্পনাকারী মনে হয় সবসময় সূচিটি বেছে নেয় foo_part
। সূচকের explain analyse
জন্য কিছুটা ভাল ফলাফলও পাওয়া যায় foo_part
:
Index Scan using foo_part on t1 (cost=0.28..297.25 rows=4433 width=16) (actual time=0.025..3.649 rows=4351 loops=1)
Index Cond: (uploaded_at IS NULL)
Total runtime: 4.060 ms
বনাম
Bitmap Heap Scan on t1 (cost=79.15..6722.83 rows=4433 width=16) (actual time=1.032..4.717 rows=4351 loops=1)
Recheck Cond: (uploaded_at IS NULL)
-> Bitmap Index Scan on foo_part_id (cost=0.00..78.04 rows=4433 width=0) (actual time=0.649..0.649 rows=4351 loops=1)
Total runtime: 5.131 ms
id
উদাহরণস্বরূপ একটি সিরিয়াল ক্ষেত্র হতে পারে ?