पूर्णांक के कॉलम में मूल्य होता है

उस पूर्णांक कॉलम को विशिष्ट मान रखने के लिए प्रदर्शन के तरीके के बारे में सबसे तेज़ तरीका क्या है?

मेरे पास postgresql 8.4 में 10 मिलियन पंक्तियों वाली एक तालिका है। मुझे प्रति सेकेंड कम से कम 10000 चेक करने की ज़रूरत है। वर्तमान में मैं क्वेरी कर रहा हूं तालिका से चयन आईडी जहां id = my_value और फिर DataReader पंक्तियों की जांच करता है। लेकिन यह काफी धीमी है। स्मृति में पूरे कॉलम को लोड किए बिना गति करने का कोई तरीका है?

0

3 उत्तर

आपको दो चीजों की ज़रूरत है,

जैसा कि मार्किन ने इंगित किया है, आप COUNT (*) का उपयोग करना चाहते हैं, यदि आपको केवल इतना पता होना है कि कितने हैं। आपको उस कॉलम पर एक इंडेक्स की भी आवश्यकता है। इंडेक्स का जवाब हाथ में काफी सही होगा। इंडेक्स के बिना, पोस्टग्रेस्क्ल को अभी भी एक नंबर गिनने के लिए पूरी तालिका में जाना होगा।

CREATE INDEX id_idx ON table (id) ASC NULLS LAST;

इस तरह के कुछ आपको वहां ले जाना चाहिए। चाहे वह क्वेरी 10,000/सेकेंड चलाने के लिए पर्याप्त है। आपके हार्डवेयर पर निर्भर करेगा ...

0
जोड़ा

आप इसके बजाय COUNT का चयन कर सकते हैं:

SELECT COUNT(*) FROM table WHERE id = my_value

यह केवल एक पूर्णांक मूल्य लौटाएगा - आपकी चुनिंदा स्थिति से मेल खाने वाली पंक्तियों की संख्या।

0
जोड़ा

यदि आप जहां id = X का उपयोग करते हैं तो X से मेल खाने वाले सभी मान वापस आ जाएंगे। मान लीजिए 1000 मान मिलान X फिर 1000 मान वापस आ जाएंगे।

अब, अगर आप केवल यह जांचना चाहते हैं कि मूल्य कम से कम एक बार है तो पहले मान से मेल खाने के बाद अन्य 999 को संसाधित करने की आवश्यकता नहीं है। भले ही आप मूल्यों की गिनती करते हैं, फिर भी आप उन सभी के माध्यम से जा रहे हैं।

इस मामले में मैं क्या करूँगा यह है:

SELECT 1 FROM table
WHERE id = my_value
LIMIT 1

ध्यान दें कि मैं id को भी वापस नहीं कर रहा हूं। तो यदि आपको एक रिकॉर्ड मिलता है तो मूल्य वहां होता है।

बेशक, इस क्वेरी को बेहतर बनाने के लिए, सुनिश्चित करें कि आपके पास id कॉलम पर एक अनुक्रमणिका है।

0
जोड़ा