मेरे पास बहुत से आवेषण के साथ एक तालिका है, जिसमें से एक फ़ील्ड ( 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
उदाहरण के लिए एक धारावाहिक क्षेत्र हो सकता है ?