मैं एसक्यूएल में काम कर रहा हूं और प्राथमिक कुंजी एसक्यूएल टेबल में 26000 हजारों रिकॉर्ड हैं।

कर्मचारी तालिका डेटा:

    Id | Name | DepartmentId
   --------------------------
    1  | AA   |    1
    2  | BB   |    1
    3  | CC   |    2

विभाग तालिका डेटा:

Id  | Name     |
----------------
1   |  IT      |
2   |  Network | 

Employee.DepartmentId के लिए इंडेक्स बनाया गया

मेरे पास नीचे के रूप में एक प्रश्न है,

Select E.Id, E.Name, E.DepartmentId
from Employees E
JOIN Department D
ON E.DepartmentId = D.Id

उपरोक्त क्वेरी 2 सेकंड में निष्पादित होती है और सभी रिकॉर्ड वापस कर देती है। लेकिन जब मैंने चयन सूची में विभाग का नाम शामिल किया तो इसमें लगभग 10 सेकंड का समय लगता है।

Select E.Id, E.Name, E.DepartmentId,D.Name
from Employees E 
JOIN Department D
ON E.DepartmentId = D.Id

यहाँ क्या मुद्दा है?

अग्रिम में धन्यवाद।

sql
2
Karthikeyan 27 पद 2016, 14:43
2
मैंने असंगत डेटाबेस टैग हटा दिए हैं। कृपया उस प्रश्न को उस डेटाबेस से टैग करें जिसका आप वास्तव में उपयोग कर रहे हैं।
 – 
Gordon Linoff
27 पद 2016, 14:45
क्या आपका DepartmentId Employees पर अनुक्रमित है? और याद रखें कि आप सभी रिकॉर्ड का चयन कर रहे हैं और JSON में लौटाया गया डेटा बड़े आकार का होगा और डेटा को स्थानांतरित करने के लिए नेटवर्क की गति पर भी विचार करने की आवश्यकता होगी।
 – 
Abhik Chakraborty
27 पद 2016, 14:45
1
अपना प्रश्न संपादित करें और निष्पादन योजना जोड़ें। फ़ॉर्मेट किया गया टेक्स्ट कृपया, कोई स्क्रीन शॉट नहीं
 – 
a_horse_with_no_name
27 पद 2016, 14:46
1
जब आप केवल कर्मचारियों में से चयन करते हैं, तो डेटाबेस ऑपिमाइज़ेशन चरण के दौरान पूरे जॉइन ऑपरेशन को हटा देगा
 – 
fafl
27 पद 2016, 14:46
यह बहुत उपयोगी होगा यदि आप अधिक जानकारी प्रदान करते हैं जैसे आप किस डेटाबेस का उपयोग कर रहे हैं और सभी तालिकाओं की संरचना।
 – 
Ricardo Pontual
27 पद 2016, 14:54

2 जवाब

इस क्वेरी के लिए:

select E.Id, E.Name, E.DepartmentId, D.Name
from Employees E join
     Department D
     on E.DepartmentId = D.Id;

इष्टतम सूचकांक Department(Id, Name) है। यदि Department(Id) प्राथमिक कुंजी है तो आपके पास अनिवार्य रूप से यह अनुक्रमणिका पहले से ही हो सकती है।

शायद एक और महत्वपूर्ण मुद्दा परिणाम सेट का आकार है। विभाग का नाम बड़ा हो सकता है (विशेषकर यदि इसे varchar() के बजाय char() के रूप में घोषित किया गया हो)। मुद्दा केवल विभाग के नाम के आकार का हो सकता है।

1
Gordon Linoff 27 पद 2016, 14:49

जैसा कि गॉर्डन द्वारा कहा गया है, यह इंडेक्स के साथ टेबल पर शामिल नहीं है जो कि मुद्दा है, बल्कि परिणाम सेट (अतिरिक्त विभाग के नाम से) में लौटाए जा रहे डेटा की मात्रा को या तो टर्मिनल में प्रदर्शित किया जा रहा है या में गुई।

इसके अतिरिक्त, आपको किसी भी अनुक्रमणिका समस्या की पहचान करने में सहायता के लिए MySQL में EXPLAIN कीवर्ड का उपयोग करने में सक्षम होना चाहिए।

1
Willem van Ketwich 27 पद 2016, 15:18