आपको अपनी क्वेरी को सरल बनाना चाहिए। यह कुछ निष्पादन समय को काट देगा। मैं आपकी क्वेरी का परीक्षण नहीं कर सकता, लेकिन यहां कुछ संकेत दिए गए हैं:
- गिनती निष्पादित करते समय क्रमबद्ध न करें ()
- आप orderBy('p.id', 'DESC') के अनुसार क्रमित कर सकते हैं , अनुक्रमणिका का उपयोग किया जाएगा
- के बजाय बाएं शामिल हों () आप शामिल हों () . का उपयोग कर सकते हैं यदि सम्मिलित तालिका में कम से कम एक रिकॉर्ड हमेशा मौजूद होता है। नहीं तो वह रिकॉर्ड छूट जाता है।
- KNP/Paginator केवल अलग-अलग रिकॉर्ड पढ़ने के लिए DISTINCT() का उपयोग करता है, लेकिन इससे डिस्क tmp तालिका का उपयोग हो सकता है
- $query->getArrayResult() सरणी हाइड्रेशन मोड का उपयोग करता है, जो बहुआयामी सरणी देता है और यह बड़े परिणाम सेट के लिए ऑब्जेक्ट हाइड्रेशन की तुलना में तेज़ है
- आप आंशिक उपयोग कर सकते हैं चयन करें('आंशिक p.{id, अन्य प्रयुक्त फ़ील्ड}') , इस तरह आप केवल आवश्यक फ़ील्ड लोड करेंगे, हो सकता है कि ऑब्जेक्ट हाइड्रेशन का उपयोग करते समय असंबद्ध संबंधों को छोड़ दें
- सिद्धांत अनुभाग के तहत किसी दिए गए प्रश्न पर SF प्रोफाइलर EXPLAIN की जाँच करें, शायद अनुक्रमणिका का उपयोग नहीं किया जाता है
- क्या p.hashtags और p.likes केवल एक पंक्ति लौटाते हैं या oneToMany है, जो परिणाम को गुणा करता है
- हो सकता है कि कुछ पोस्ट डिज़ाइन में परिवर्तन हों, जो कुछ जॉइन को हटा दें:
- p.hashtags फ़ील्ड को @ORM\Column(type="array") के रूप में परिभाषित किया गया है और टैग के स्ट्रिंग मान संग्रहीत किए हैं। बाद में शायद क्रमबद्ध सरणी पर पूर्ण पाठ खोज का उपयोग करना।
- p.likesCount फ़ील्ड को @ORM\Column(type="integer") के रूप में परिभाषित किया गया है जिसमें लाइक्स की संख्या होगी
मैं KnpLabs/KnpPaginatorBundle का उपयोग करता हूं और जटिल प्रश्नों के लिए गति संबंधी समस्याएं भी हो सकती हैं।
आमतौर पर LIMIT x, z का उपयोग DB के लिए धीमा है, क्योंकि यह पूरे डेटासेट पर COUNT चलाता है। यदि अनुक्रमणिका का उपयोग नहीं किया जाता है तो यह बहुत धीमी गति से होता है।
आप अलग दृष्टिकोण का उपयोग कर सकते हैं और आईडी को आगे बढ़ाकर कुछ कस्टम पेजिनेशन कर सकते हैं, लेकिन यह आपके दृष्टिकोण को जटिल बना देगा। मैंने इसे SYSLOG टेबल जैसे बड़े डेटासेट के साथ इस्तेमाल किया है। लेकिन आप छँटाई और कुल रिकॉर्ड गणना कार्यक्षमता खो देते हैं।