एकाधिक क्वेरीिंग और सबक्वायरी के साथ इस क्वेरी को कैसे अनुकूलित करें

ठीक है, मैं अभी एक वेबसाइट पर काम कर रहा हूं जो इलेक्ट्रॉनिक उपकरणों के हिस्सों के बारे में जानकारी दिखाता है। इन भागों को कभी-कभी एक संशोधन मिलता है। भाग संख्या वही रहता है, लेकिन वे भाग संख्या में ए, बी, सी आदि जोड़ते हैं, इसलिए पत्र 'जितना' नया होता है, उतना ही नया होता है। एक तिथि भी जोड़ा जाता है। तो तालिका इस तरह कुछ दिखती है:

------------------------------------------------------------
| Partcode       |   Description        | Partdate         |
------------------------------------------------------------
| 12345A         | Some description 1   | 2009-11-10       |
| 12345B         | Some description 2   | 2010-12-30       |
| 17896A         | Some description 3   | 2009-01-12       |
| 12345C         | Some description 4   | 2011-08-06       |
| 17896B         | Some description 5   | 2009-07-10       |
| 12345D         | Some description 6   | 2012-05-04       |
------------------------------------------------------------

मुझे अभी एक हिस्से के नवीनतम संशोधन से डेटा चाहिए। तो इस उदाहरण के लिए मुझे चाहिए:

12345 डी और 17896 बी

मेरे सामने कुछ सवाल यह है कि इस पंक्ति में कुछ है:

SELECT substring(Partcode, 1, 5) AS Part,
       (
            SELECT pt.Partcode
            FROM Parttable pt
            WHERE substring(pt.PartCode, 1, 5) = Part
            ORDER BY pt.Partdate DESC
            LIMIT 0,1
       ),
       (
            SELECT pt.Description
            FROM Parttable pt
            WHERE substring(pt.PartCode, 1, 5) = Part
            ORDER BY pt.Partdate DESC
            LIMIT 0,1
       ),
       (
            SELECT pt.Partdate
            FROM Parttable pt
            WHERE substring(pt.PartCode, 1, 5) = Part
            ORDER BY pt.Partdate DESC
            LIMIT 0,1
       )
FROM Parttable
GROUP BY Part

जैसा कि आप समझेंगे, यह क्वेरी बेहद धीमी है और वास्तव में अक्षम है। लेकिन मैं इस सवाल को अनुकूलित करने के तरीके के बारे में अपने सिर को नहीं प्राप्त कर सकता हूं।

तो मुझे उम्मीद है कि कोई मदद कर सकता है।

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

पुनश्च। मैं एक MySQL डेटाबेस पर काम कर रहा हूं और किसी से पूछने से पहले, मैं डेटाबेस नहीं बदल सकता।

0
जोड़ा संपादित
विचारों: 1
PartcodePrefix में भाग कोड को सामान्यीकृत करना, PartcodeSuffix एक अच्छी शुरुआत होगी।
जोड़ा लेखक Salman A, स्रोत
क्षमा करें, मैं बहुत आखिरी बिंदु याद किया :)
जोड़ा लेखक Salman A, स्रोत
@ सलमान ए जैसा कि मैंने कहा, डेटाबेस को नहीं बदला जा सकता है, अन्यथा यह पहली चीज होगी जो मैंने किया होगा।
जोड़ा लेखक Crinsane, स्रोत
@ सलमाना: ... अगर वे डेटाबेस बदल सकते हैं।
जोड़ा लेखक Jon, स्रोत

1 उत्तर

सबसे पहले: एक अलग कॉलम में अपने संस्करण चर को संग्रहीत क्यों न करें? इस तरह आपको पहले इसे निकालने के लिए सबस्ट्रिंग को कॉल करने की आवश्यकता नहीं होगी। यदि आपको वास्तव में कोड और संस्करण को संयोजित करने की आवश्यकता है, तो मुझे अंत में यह करने का अच्छा अभ्यास है।

फिर आपके स्थान पर, मैं पहले कोड और संस्करण को विभाजित करता हूं, और एक समग्र क्वेरी में बस अधिकतम का उपयोग करता हूं, जैसे:

SELECT code,max(version) FROM
  (SELECT substring(Partcode, 5, 1) as code,
         substring(Partcode, 1, 5) as version
  FROM Parttable
  )
AS part
GROUP BY code;

नोट: मैंने इस क्वेरी का परीक्षण नहीं किया है, इसलिए आपको कुछ पैरामीटर को ठीक करने की आवश्यकता हो सकती है, जैसे सबस्ट्रिंग इंडेक्स।

0
जोड़ा
सहायता के लिए धन्यवाद। मैं अपने डेटा के साथ काम करने के लिए क्वेरी में बदल गया, और यह थोड़े काम करता है। मुझे सही पार्टकोड मिलता है, इसलिए यह बहुत अच्छा है, लेकिन मुझे उस पार्टकोड के विवरण की भी आवश्यकता है, लेकिन मुझे पहले भागोड का विवरण मिलता है जो यह आता है (उसी कोड के साथ)
जोड़ा लेखक Crinsane, स्रोत
मैं इसके साथ थोड़ा सा झुका, और काम करने के लिए मिल गया! निष्पादन समय क्वेरी के लिए 20 सेकंड से 0.5 सेकंड तक चला गया! महान! धन्यवाद!
जोड़ा लेखक Crinsane, स्रोत
फिर आपको इनर जॉइन का उपयोग करके अतिरिक्त क्वेरी स्तर का उपयोग करना चाहिए, देखें: stackoverflow.com/questions/612231/… में किसी अन्य कॉलम द्वारा अलग अधिकतम मान मूल्य के साथ पंक्तियों का चयन कैसे कर सकता हूं
जोड़ा लेखक Alexis, स्रोत
ठीक है, आपका स्वागत है।
जोड़ा लेखक Alexis, स्रोत