मेरे पास एक प्रश्न है जो लगभग 2 वर्षों तक ठीक चल रहा है। डेटाबेस तालिका में लगभग 50 मिलियन पंक्तियां हैं, और धीरे-धीरे बढ़ रही हैं। पिछले हफ्ते मेरे प्रश्नों में से एक लगभग तुरंत चलने के लिए घंटों तक लौटने से चला गया।सरल क्वेरी साल के लिए काम कर रही है, तो अचानक बहुत धीमी
Rank.objects.filter(site=Site.objects.get(profile__client=client, profile__is_active=False)).latest('id')
मैंने धीमी क्वेरी को रैंक मॉडल तक सीमित कर दिया है। ऐसा लगता है कि नवीनतम() विधि का उपयोग करने के साथ कुछ करना है। अगर मैं सिर्फ एक क्वेरीसेट मांगता हूं, तो यह तुरंत एक खाली क्वेरीसेट देता है।
#count returns 0 and is fast
Rank.objects.filter(site=Site.objects.get(profile__client=client, profile__is_active=False)).count() == 0
Rank.objects.filter(site=Site.objects.get(profile__client=client, profile__is_active=False)) == [] #also very fast
एक्स्पलाइन चलाने के परिणाम यहां दिए गए हैं। http://explain.depesz.com/s/wPh
और विश्लेषण व्याख्या: http://explain.depesz.com/s/ggi
मैं मेज, कोई परिवर्तन नहीं सफाई की कोशिश की। "साइट" फ़ील्ड (विदेशीकी) पर पहले से ही एक सूचकांक है।
अजीब, अगर मैं एक और ग्राहक पहले से ही उसके खाते से संबद्ध वस्तुओं रैंक वाले के लिए यह एक ही क्वेरी चलाने, फिर क्वेरी बहुत जल्दी एक बार फिर से वापस आती है। तो ऐसा लगता है कि यह केवल एक समस्या है जब वे उस ग्राहक के लिए कोई रैंक ऑब्जेक्ट नहीं हैं।
कोई भी विचार?
संस्करण: Postgres 9.1, Django 1.4 SVN ट्रंक फिरना 17047
आदेश द्वारा में WHERE में मैदान पर एक यौगिक सूचकांक के साथ ही क्षेत्र की स्थापना चाल किया था। क्वेरी प्लानर को सॉर्ट करने के लिए पूरे इंडेक्स के माध्यम से स्कैनिंग कर रहा था, और फिर फ़िल्टर कर रहा था। यौगिक सूचकांक चाल है। – erikcw