PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कई से कई टेबल - प्रदर्शन खराब है

सबसे महत्वपूर्ण बात यह है कि आपको प्लेयर्सइनक्लब (क्लब_आईडी, प्लेयर_आईडी) पर एक इंडेक्स चाहिए। . बाकी विवरण है (जिससे अभी भी काफी फर्क पड़ सकता है)।
आपको अपने वास्तविक लक्ष्यों के बारे में सटीक होना चाहिए। आप लिखते हैं:

आपको क्लब . में शामिल होने की आवश्यकता नहीं है इसके लिए बिल्कुल:

SELECT p.* 
FROM   playersinclubs pc
JOIN   player         p ON p.id = pc.player_id
WHERE  pc.club_id = 3;

और आपको कॉलम खिलाड़ियों के क्लबों . की आवश्यकता नहीं है आउटपुट में या तो, जो प्रदर्शन के लिए एक छोटा लाभ है - जब तक कि यह केवल-अनुक्रमणिका . की अनुमति नहीं देता खिलाड़ियों के क्लबों . पर स्कैन करें , तो यह पर्याप्त हो सकता है।

आपको शायद सभी की ज़रूरत नहीं है खिलाड़ी . के कॉलम परिणाम में, या तो। केवल चुनें वे कॉलम जिनकी आपको वास्तव में आवश्यकता है।

खिलाड़ी . पर PK आपको उस तालिका पर आवश्यक अनुक्रमणिका प्रदान करता है।

आपको playersinclubs(club_id, player_id) . पर एक इंडेक्स चाहिए , लेकिन नहीं . करें इसे तब तक अद्वितीय बनाएं जब तक कि खिलाड़ियों को एक ही क्लब में दूसरी बार शामिल होने की अनुमति न दी जाए।

यदि खिलाड़ी कई बार शामिल हो सकते हैं और आप केवल "सभी खिलाड़ियों" की सूची चाहते हैं, तो आपको एक DISTINCT भी जोड़ना होगा डुप्लिकेट प्रविष्टियों को मोड़ने के लिए कदम। आप बस कर सकते हैं:

SELECT DISTINCT p.* ...

लेकिन चूंकि आप प्रदर्शन को अनुकूलित करने का प्रयास कर रहे हैं:नकली को जल्दी खत्म करना सस्ता है:

SELECT p.*
FROM  (
   SELECT DISTINCT player_id
   FROM   playersinclubs
   WHERE  club_id = 3;
   ) pc
JOIN   player p ON p.id = pc.player_id;

शायद आप वाकई सब चाहते हैं खिलाड़ियों के क्लबों . में प्रविष्टियां और तालिका के सभी कॉलम भी। लेकिन आपका विवरण कुछ और ही कहता है। क्वेरी और इंडेक्स अलग होंगे।

निकट से संबंधित उत्तर:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में उपलब्ध कॉलेशन की सूची कैसे लौटाएं

  2. psycopg2:टुपल्स के टपल के मानों के साथ तालिका में कई पंक्तियों को अपडेट करें

  3. एक सेट-रिटर्निंग फ़ंक्शन को एक सरणी तर्क के साथ कई बार कॉल करें

  4. EF Core GroupBy चुनिंदा डिस्टिंक्ट काउंट के साथ

  5. अस्थायी डेटाबेस डिज़ाइन, एक मोड़ के साथ (लाइव बनाम ड्राफ्ट पंक्तियाँ)