मान लें कि हम एक बड़ी तालिका . के साथ काम कर रहे हैं , एक आंशिक अनुक्रमणिका मदद कर सकता है:
CREATE INDEX tbl_created_recently_idx ON tbl (created_at DESC)
WHERE created_at > '2013-09-15 0:0'::timestamp;
जैसा कि आप पहले ही पता लगा चुके हैं:अवरोही या आरोही यहाँ शायद ही मायने रखता है। पोस्टग्रेज लगभग समान गति से पीछे की ओर स्कैन कर सकते हैं (बहु-स्तंभ सूचकांकों के साथ अपवाद लागू होते हैं)।
इस अनुक्रमणिका का उपयोग करने के लिए प्रश्न:
SELECT * FROM tbl
WHERE created_at > '2013-09-15 0:0'::timestamp -- matches index
ORDER BY created_at DESC
LIMIT 1;
यहां बिंदु यह है कि सूचकांक को बहुत छोटा बनाया जाए , इसलिए इसे कैश करना और बनाए रखना आसान होना चाहिए।
- आपको एक ऐसा टाइमस्टैम्प चुनना होगा जो सबसे हाल के टाइमस्टैम्प से छोटा होने की गारंटी हो।
- पुराने डेटा को काटने के लिए आपको समय-समय पर इंडेक्स को फिर से बनाना चाहिए।
- शर्त
IMMUTABLE
होनी चाहिए ।
तो एकमुश्त प्रभाव समय के साथ बिगड़ता जाता है। विशिष्ट समस्या हार्ड कोडेड कंडीशन है:
WHERE created_at > '2013-09-15 0:0'::timestamp
स्वचालित
आप समय-समय पर इंडेक्स और अपने प्रश्नों को मैन्युअल रूप से अपडेट कर सकते हैं। या आप इसे इस तरह के फ़ंक्शन की सहायता से स्वचालित करते हैं:
CREATE OR REPLACE FUNCTION f_min_ts()
RETURNS timestamp LANGUAGE sql IMMUTABLE AS
$$SELECT '2013-09-15 0:0'::timestamp$$
सूचकांक:
CREATE INDEX tbl_created_recently_idx ON tbl (created_at DESC);
WHERE created_at > f_min_ts();
प्रश्न:
SELECT * FROM tbl
WHERE created_at > f_min_ts()
ORDER BY created_at DESC
LIMIT 1;
क्रॉन जॉब या कुछ ट्रिगर-आधारित ईवेंट के साथ मनोरंजन को स्वचालित करें। आपके प्रश्न अब वही रह सकते हैं। लेकिन आपको सभी सूचकांकों को फिर से बनाने की आवश्यकता है इसे बदलने के बाद किसी भी तरह से इस फ़ंक्शन का उपयोग करना। बस ड्रॉप करें और प्रत्येक को बनाएं।
पहले ..
... परीक्षण करें कि क्या आप वास्तव में इसके साथ बोतल की गर्दन को मार रहे हैं।
कोशिश करें कि क्या एक साधारण DROP index ... ; CREATE index ...
काम करता है। तब आपका सूचकांक फूला हुआ हो सकता है। आपकी ऑटोवैक्यूम सेटिंग बंद हो सकती है।
या VACUUM FULL ANALYZE
आज़माएं अपने पूरे टेबल प्लस इंडेक्स को पुरानी स्थिति में लाने के लिए और फिर से जांचें।
अन्य विकल्प सामान्य सामान्य प्रदर्शन ट्यूनिंग और कवरिंग इंडेक्स शामिल करें, जो इस बात पर निर्भर करता है कि आप वास्तव में तालिका से क्या प्राप्त करते हैं।