get_customer_trans()
एक टेबल नहीं है - शायद कुछ संग्रहीत प्रक्रिया, इसलिए क्वेरी वास्तव में छोटी नहीं है। आपको यह देखने की आवश्यकता होगी कि यह संग्रहीत कार्यविधि वास्तव में यह समझने के लिए क्या करती है कि यह धीमी गति से क्यों काम कर सकती है।
हालांकि, संग्रहीत कार्यविधि व्यवहार की परवाह किए बिना, निम्नलिखित अनुक्रमणिका को जोड़ने से बहुत मदद मिलनी चाहिए:
CREATE INDEX do_not_email_tbl_idx1
ON do_not_email_tbl(do_not_email_address);
यह इंडेक्स NOT IN
. देता है जल्दी से जवाब वापस करने के लिए क्वेरी। हालांकि, NOT IN
पुराने PostgreSQL संस्करणों में समस्याओं के लिए जाना जाता है - इसलिए सुनिश्चित करें कि आप कम से कम PostgreSQL 9.1 या बाद के संस्करण चला रहे हैं।
अपडेट करें . अपनी क्वेरी को इसमें बदलने का प्रयास करें:
SELECT t.*
FROM get_customer_trans() AS t
WHERE NOT EXISTS (
SELECT 1
FROM do_not_email_tbl
WHERE do_not_email_address = t.user_email
LIMIT 1
)
यह क्वेरी NOT IN
. का उपयोग नहीं करती है , और तेजी से काम करना चाहिए। मुझे लगता है कि PostgreSQL 9.2 में इस क्वेरी को उतनी ही तेजी से काम करना चाहिए जितना NOT IN
हालांकि।