একাধিক substring এবং subquery সঙ্গে এই ক্যোয়ারী অপ্টিমাইজ কিভাবে

ঠিক আছে, আমি এখন একটি ওয়েবসাইটে কাজ করছি যা ইলেকট্রনিক ডিভাইসগুলির অংশ সম্পর্কে তথ্য দেখায়। এই অংশগুলি কখনও কখনও একটি সংশোধন পেতে। অংশ সংখ্যা একই থাকে, কিন্তু তারা অংশ সংখ্যা থেকে A, B, C ইত্যাদি যোগ করে, সুতরাং 'হেগ্রার' অক্ষরটি নতুন নয়। এছাড়াও একটি তারিখ যোগ করা হয়। সুতরাং টেবিল এই মত কিছু দেখায়:

------------------------------------------------------------
| 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

আপনি বুঝতে পারবেন, এই ক্যোয়ারী অত্যন্ত ধীর এবং সত্যিই অকার্যকর মনে হয়। কিন্তু এই ক্যোয়ারীটি কীভাবে অপ্টিমাইজ করা যায় তা নিয়ে আমি আমার মাথাটি পেতে পারি না।

তাই আমি সত্যিই কেউ সাহায্য করতে পারেন আশা করি।

আগাম ধন্যবাদ!

গীত। আমি একটি মাইএসকিউএল ডাটাবেসে কাজ করছি এবং কেউ জিজ্ঞাসা করার আগে, আমি ডাটাবেস পরিবর্তন করতে পারি না।

0
যোগ সম্পাদিত
মতামত: 1
PartcodePrefix এ অংশ কোড সাধারণকরণ, PartcodeSuffix একটি ভাল শুরু হতে হবে।
যোগ লেখক Salman A, উৎস
দুঃখিত, আমি খুব শেষ বিন্দু মিস :)
যোগ লেখক Salman A, উৎস
@ সালমানঃ আমি যেমন বলেছি, ডাটাবেসটি পরিবর্তন করা যায় না, অন্যথায় এটি প্রথম কাজ হয়ে যেত।
যোগ লেখক Crinsane, উৎস
@ সালমান এ: ... যদি তারা ডাটাবেস পরিবর্তন করতে পারে।
যোগ লেখক Jon, উৎস

1 উত্তর

প্রথম: কেন আপনার সংস্করণ ভেরিয়েবলটি একটি পৃথক কলামে সংরক্ষণ করবেন না? এই উপায়ে আপনি প্রথম এটি extract যাও substring কল করার প্রয়োজন হবে না। যদি আপনি সত্যিই কোড এবং সংস্করণ concatenated করা প্রয়োজন, আমি এটা শেষ করতে এটি একটি ভাল অনুশীলন জিনিস।

তারপর আপনার জায়গায়, আমি প্রথমে কোড এবং সংস্করণটি বিভক্ত করব, এবং সমষ্টিগত প্রশ্নে কেবল সর্বোচ্চ ব্যবহার করি, যেমন:

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, উৎস
আমি এটি সঙ্গে একটি বিট fiddled, এবং কাজ এটি পেয়েছিলাম! এক্সিকিউশন টাইমটি ২0 সেকেন্ডের জন্য কোয়েরি থেকে 0.5 সেকেন্ডে চলে গেছে! গ্রেট! ধন্যবাদ!
যোগ লেখক Crinsane, উৎস
তারপর INNER JOIN ব্যবহার করে আপনি কি অতিরিক্ত ক্যোয়ারী স্তর ব্যবহার করতে চান তা দেখুন, দেখুন:
যোগ লেখক Alexis, উৎস
জরিমানা, আপনি স্বাগত জানাই
যোগ লেখক Alexis, উৎস