इस विशेष क्रम के साथ एक आंशिक, बहु-स्तंभ अनुक्रमणिका बनाएं:
CREATE INDEX products_status_sales_partial_idx ON products (status, sales DESC)
WHERE category NOT IN ('cat3','cat7');
अपनी क्वेरी को थोड़ा संशोधित करें:
SELECT product_no, sales
FROM products
WHERE status = 'something'
AND category NOT IN ('cat3', 'cat7')
ORDER BY status, sales DESC
LIMIT 3;
status
जोड़ना ORDER BY
. के पहले तत्व के रूप में खंड बेमानी और व्यर्थ लगता है। लेकिन इसे आजमाएं।
क्यों?
क्वेरी प्लानर इतना समझदार नहीं है कि यह समझ सके कि
. के साथWHERE status = 'something' ...
ORDER BY sales DESC
अनुक्रमणिका का क्रम क्रम (status, sales DESC)
तार्किक परिणाम के रूप में मेल खाता है। तो यह सभी पढ़ने जा रहा है योग्य पंक्तियाँ, क्रमित करें और शीर्ष 3 चुनें।
status
adding जोड़कर ORDER BY
आप क्वेरी प्लानर को इंडेक्स से शीर्ष 3 प्रविष्टियों को सीधे पढ़ने के लिए सक्षम करते हैं। परिमाण के कई क्रम . द्वारा गति-अप की अपेक्षा करें ।
PostgreSQL 8.4 और 9.1 के साथ परीक्षण किया गया।