मैंने पुष्टि की है कि इंडेक्स उम्मीद के मुताबिक काम करता है।
मैंने यादृच्छिक डेटा को फिर से बनाया, केवल इस बार diet_glutenfree
set सेट किया करने के लिए random() > 0.9
इसलिए on
. होने की केवल 10% संभावना है बिट।
फिर मैंने इंडेक्स को फिर से बनाया और फिर से क्वेरी करने की कोशिश की।
SELECT RecipeId from RecipeMetadata where diet_glutenfree;
रिटर्न:
'Index Scan using idx_recipemetadata_glutenfree on recipemetadata (cost=0.00..135.15 rows=1030 width=16)'
' Index Cond: (diet_glutenfree = true)'
और:
SELECT RecipeId from RecipeMetadata where NOT diet_glutenfree;
रिटर्न:
'Seq Scan on recipemetadata (cost=0.00..214.26 rows=8996 width=16)'
' Filter: (NOT diet_glutenfree)'
ऐसा लगता है कि मेरा पहला प्रयास प्रदूषित हो गया था क्योंकि पीजी का अनुमान है कि इंडेक्स हिट करने के बजाय पूरी तालिका को स्कैन करना तेज़ है अगर इसे आधे से अधिक पंक्तियों को लोड करना है।
हालांकि, मुझे लगता है कि कॉलम की पूरी अनुक्रमणिका पर मुझे ये सटीक परिणाम मिलेंगे। क्या आंशिक अनुक्रमणिका में अनुक्रमित पंक्तियों की संख्या को सत्यापित करने का कोई तरीका है?
अपडेट करें
सूचकांक लगभग 40k है। मैंने उसी कॉलम की पूरी अनुक्रमणिका बनाई है और यह 200k से अधिक है, इसलिए ऐसा लगता है कि यह निश्चित रूप से आंशिक है।