में प्राकृतिक जॉइन बनाम हाल ही में, मैंने एक बड़ी मात्रा में डेटा पुनर्प्राप्त करने के साथ निपटाया जिसमें MySQL डेटाबेस से हजारों रिकॉर्ड शामिल हैं। चूंकि यह इतना बड़ा डेटा सेट संभालने का मेरा पहला समय था, इसलिए मैंने SQL कथन की दक्षता के बारे में नहीं सोचा था। और समस्या आती है।क्लाउड
यहाँ डेटाबेस की तालिकाओं कर रहे हैं (यह एक पाठ्यक्रम प्रणाली की बस एक साधारण डेटाबेस मॉडल है):
पाठ्यक्रम:
+-----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+----------------+
| course_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| lecturer | varchar(20) | NO | | NULL | |
| credit | float | NO | | NULL | |
| week_from | tinyint(3) unsigned | NO | | NULL | |
| week_to | tinyint(3) unsigned | NO | | NULL | |
+-----------+---------------------+------+-----+---------+----------------+
का चयन करें:
+-----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+----------------+
| select_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| card_no | int(10) unsigned | NO | | NULL | |
| course_id | int(10) unsigned | NO | | NULL | |
| term | varchar(7) | NO | | NULL | |
+-----------+------------------+------+-----+---------+----------------+
जब मैं छात्र द्वारा चुने गए सभी पाठ्यक्रमों को पुनर्प्राप्त करना चाहते हैं (उनके कार्ड नंबर के साथ), एसक्यूएल कथन
012 हैSELECT course_id, name, lecturer, credit, week_from, week_to
FROM `course` WHERE course_id IN (
SELECT course_id FROM `select` WHERE card_no=<student's card number>
);
लेकिन, यह बेहद धीमा था और यह लंबे समय तक कुछ भी वापस नहीं आया। तो मैंने खंड NATURAL JOIN
में बदल दिया। यहां एसक्यूएल,
SELECT course_id, name, lecturer, credit, week_from, week_to
FROM `select` NATURAL JOIN `course`
WHERE card_no=<student's card number>;
यह तुरंत लौटता है और ठीक काम करता है!
तो मेरे सवाल है:
NATURAL JOIN
औरWHERE IN
क्लाज के बीच क्या अंतर है?- उन्हें अलग-अलग प्रदर्शन कैसे करता है? (क्या ऐसा हो सकता है क्योंकि मैं कोई
INDEX
स्थापित नहीं करता हूं?) - हम
NATURAL JOIN
याWHERE IN
का उपयोग कब करेंगे?
'चयन' एक तालिका के लिए एक भयानक नाम है। –