सबसे महत्वपूर्ण बात यह है कि आपको प्लेयर्सइनक्लब (क्लब_आईडी, प्लेयर_आईडी) पर एक इंडेक्स चाहिए। . बाकी विवरण है (जिससे अभी भी काफी फर्क पड़ सकता है)।
आपको अपने वास्तविक लक्ष्यों के बारे में सटीक होना चाहिए। आप लिखते हैं:
आपको क्लब
. में शामिल होने की आवश्यकता नहीं है इसके लिए बिल्कुल:
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;
शायद आप वाकई सब चाहते हैं खिलाड़ियों के क्लबों
. में प्रविष्टियां और तालिका के सभी कॉलम भी। लेकिन आपका विवरण कुछ और ही कहता है। क्वेरी और इंडेक्स अलग होंगे।
निकट से संबंधित उत्तर: