অধ্যায় 9 (পার্সার এবং অপ্টিমাইজার) অনুসারে, সাশা পাচেভ রচিত মাইএসকিউএল ইন্টার্নালিং বইয়ের পৃষ্ঠা 172
নীচের কাজগুলি হিসাবে কোয়েরির মূল্যায়ন এখানে রয়েছে:
- সারণীগুলি থেকে রেকর্ডগুলি পুনরুদ্ধার করতে কোন কীগুলি ব্যবহার করা যেতে পারে তা নির্ধারণ করুন এবং প্রতিটি টেবিলের জন্য সেরাটি চয়ন করুন।
- প্রতিটি টেবিলের জন্য, সিদ্ধান্ত নিন যে কোনও টেবিল স্ক্যান কোনও কীতে পড়া ভাল decide মূল মানটির সাথে মেলে এমন অনেকগুলি রেকর্ড থাকলে, কীটির সুবিধাগুলি হ্রাস হয় এবং টেবিল স্ক্যানটি দ্রুত হয়ে যায়।
- যখন কোয়েরিতে একাধিক টেবিল উপস্থিত থাকবে তখন সারণিতে কোন সারণিতে যোগদান করতে হবে তা নির্ধারণ করুন।
- ডেড কোড মুছে ফেলার জন্য যেখানে অধ্যায়গুলি পুনরায় লিখুন, অযৌক্তিক গণনা হ্রাস করতে এবং কীগুলি ব্যবহারের জন্য উন্মুক্ত করার জন্য যেখানেই সম্ভব সীমাবদ্ধতাগুলি পরিবর্তন করুন।
- যোগদান থেকে অব্যবহৃত টেবিলগুলি বাদ দিন।
- কীগুলি
ORDER BY
এবং এর জন্য ব্যবহার করা যায় কিনা তা নির্ধারণ করুন GROUP BY
।
- সাবকিউরিগুলি সহজতর করার চেষ্টা করুন পাশাপাশি তাদের ফলাফলগুলি কতটা ক্যাশে করা যায় তা নির্ধারণ করুন।
- ভিউগুলি মার্জ করুন (ম্যাক্রো হিসাবে দেখার রেফারেন্সটি প্রসারিত করুন)
একই পৃষ্ঠায় এটি নিম্নলিখিত বলে:
মাইএসকিউএল অপ্টিমাইজার টার্মিনোলজিতে, প্রতিটি ক্যোয়ারিতে যোগ দেওয়ার একটি সেট। যোগদান শব্দটি এসকিউএল কমান্ডের চেয়ে এখানে আরও বিস্তৃতভাবে ব্যবহৃত হয়। শুধুমাত্র একটি টেবিলের একটি ক্যোয়ারী হ'ল অবক্ষয়যুক্ত যোগদান। যদিও আমরা সাধারণত একটি টেবিলে রেকর্ডগুলি পড়া হিসাবে ভাবার কথা ভাবি না, একই কাঠামো এবং অ্যালগরিদমগুলি প্রচলিত যোগদানের সাথে শুধুমাত্র একটি টেবিলের সাহায্যে ক্যোয়ারি সমাধান করার জন্য পুরোপুরি কাজ করে।
উপসংহার
উপস্থিত কীগুলি, উপাত্তের পরিমাণ এবং ক্যোয়ারের অভিব্যক্তির কারণে, মাইএসকিউএল যোগ দেয় কখনও কখনও আমাদের নিজের ভাল (বা আমাদের কাছে ফিরে আসতে) কাজ করতে পারে এবং আমরা প্রত্যাশা করি না এমন ফলাফল নিয়ে আসতে পারি এবং দ্রুত ব্যাখ্যা করতে পারি না।
আমি এই উদ্বিগ্নতা সম্পর্কে আগে লিখেছি
কারণ মাইএসকিউএল ক্যোয়ারী অপ্টিমাইজার কোয়েরি মূল্যায়নের সময় নির্দিষ্ট কীগুলি বরখাস্ত করতে পারে।
@ ফিলের মন্তব্য আমাকে এই উত্তরটি কীভাবে পোস্ট করবেন তা দেখতে সহায়তা করে (@ ফিলের মন্তব্যের জন্য +1)
@ ইয়ারকিউবের মন্তব্য (এটির জন্যও +1) আমার পোস্টের একটি কমপ্যাক্ট সংস্করণ কারণ মাইএসকিউএল এর কোয়েরি অপটিমাইজার আদিম। দুর্ভাগ্যক্রমে, এটি হওয়া উচিত কারণ এটি বাইরের স্টোরেজ ইঞ্জিনগুলির সাথে ডিল করে।
উপসংহার
আপনার আসল প্রশ্ন হিসাবে, মাইএসকিউএল ক্যোরি অপ্টিমাইজারটি প্রতিটি ক্যোয়ারীর কাজ সম্পাদন করার সময় পারফরম্যান্স মেট্রিকগুলি নির্ধারণ করবে
- সারি গণনা
- কী নির্বাচন করা
- বিরতিতে ফলাফল সেট ম্যাসেজ
- ওহ হ্যাঁ, আসল যোগদান করুন
কোয়েরিকে পুনরায় (রিফ্যাক্টরিং) লিখে আপনার মৃত্যুদণ্ডের আদেশটি জোর করে নিতে হবে
আপনার দেওয়া প্রথম প্রশ্নটি এখানে
select count(*)
from table1 a
join table2 b
on b.key_col=a.key_col
where b.tag = 'Y';
প্রথমে WHERE মূল্যায়নের জন্য এটি পুনরায় লেখার চেষ্টা করুন
select count(*)
from table1 a
join (select key_col from table2 where tag='Y') b
on b.key_col=a.key_col;
এটি স্পষ্টভাবে পরিকল্পনার পরিবর্তন করবে। এটি আরও ভাল বা খারাপ ফলাফল তৈরি করতে পারে।
আমি একবার স্ট্যাক ওভারফ্লোতে একটি প্রশ্নের উত্তর দিয়েছি যেখানে আমি এই কৌশলটি প্রয়োগ করেছি। এক্সপ্লেইন ভয়াবহ ছিল তবে অভিনয়টি ডায়নামাইট। এটি কেবলমাত্র সঠিক সূচী উপস্থিত থাকার কারণে এবং একটি সাব-কেয়রিতে LIMIT ব্যবহারের কারণে কাজ করেছে ।
শেয়ারের দামের মতো, যখন প্রশ্নগুলির কথা আসে এবং সেগুলি প্রকাশ করার চেষ্টা করা হয়, তখন সীমাবদ্ধতা প্রযোজ্য হবে, ফলাফলগুলি বিভিন্ন রকম হতে পারে এবং অতীত কর্মক্ষমতা ভবিষ্যতের ফলাফলের সূচক নয়।