| শুধুমাত্র ক্লাউড ফায়ারস্টোর এন্টারপ্রাইজ সংস্করণের জন্য প্রাসঙ্গিক। |
ধীরগতির কোয়েরিগুলির সমস্যা সমাধানের জন্য, কোয়েরি এক্সিকিউশন প্ল্যান এবং রানটাইম এক্সিকিউশন প্রোফাইল পেতে Query Explain ব্যবহার করুন। নিম্নলিখিত অংশে এক্সিকিউশন প্রোফাইলের উপর নির্ভর করে কোয়েরি পারফর্ম্যান্স অপ্টিমাইজ করার জন্য আপনি যে পদক্ষেপগুলি নিতে পারেন তা বর্ণনা করা হয়েছে:
ফলাফলের সংখ্যা সীমিত করুন
এক্সিকিউশন ট্রিতে রেকর্ডস রিটার্নিং ফিল্ড ব্যবহার করে কোয়েরিটি অনেক ডকুমেন্ট ফেরত দিচ্ছে কিনা তা সনাক্ত করুন। $limit ক্লজ ব্যবহার করে ফেরত দস্তাবেজের সংখ্যা সীমিত করার কথা বিবেচনা করুন। এটি নেটওয়ার্কের মাধ্যমে ক্লায়েন্টদের কাছে ফেরত পাঠানোর সময় ফলাফলের সিরিয়ালাইজড বাইট আকার হ্রাস করে। যেসব ক্ষেত্রে Limit নোডের আগে একটি MajorSort নোড থাকে, সেখানে কোয়েরি ইঞ্জিন Limit এবং MajorSort নোডগুলিকে একত্রিত করতে পারে এবং একটি সম্পূর্ণ ইন-মেমোরি ম্যাটেরিয়ালাইজেশন এবং একটি TopN সর্ট দিয়ে সর্ট করতে পারে, যার ফলে কোয়েরির জন্য মেমোরির প্রয়োজনীয়তা হ্রাস পায়।
ফলাফল নথির আকার সীমিত করুন
অপ্রয়োজনীয় ক্ষেত্রগুলি আনা এড়াতে $project ধারা ব্যবহার করে ফেরত দস্তাবেজের আকার সীমিত করার কথা বিবেচনা করুন। এটি মধ্যবর্তী ফলাফল প্রক্রিয়াকরণের গণনা এবং মেমরি খরচ এবং নেটওয়ার্কের মাধ্যমে ক্লায়েন্টদের কাছে ফেরত পাঠানোর সময় ফলাফলের সিরিয়ালাইজড বাইট আকার হ্রাস করতে সহায়তা করে। যেসব ক্ষেত্রে কোয়েরিতে উল্লেখিত সমস্ত ক্ষেত্র একটি নিয়মিত সূচক (মাল্টিকে নয়) দ্বারা আচ্ছাদিত থাকে, সেখানে এটি কোয়েরিকে সম্পূর্ণরূপে সূচক স্ক্যান দ্বারা আচ্ছাদিত করার অনুমতি দেয়, যার ফলে প্রাথমিক স্টোরেজ থেকে নথি আনার প্রয়োজন এড়ানো যায়।
সূচী ব্যবহার করুন
সূচী সেট আপ এবং অপ্টিমাইজ করতে নিম্নলিখিত নির্দেশাবলী ব্যবহার করুন।
কোয়েরিটি একটি সূচক ব্যবহার করছে কিনা তা সনাক্ত করুন।
এক্সিকিউশন ট্রির লিফ নোডগুলি পরীক্ষা করে আপনি কোয়েরিটি কোনও সূচক ব্যবহার করছে কিনা তা সনাক্ত করতে পারেন। যদি এক্সিকিউশন ট্রির লিফ নোডটি একটি টেবিলস্ক্যান নোড হয়, তাহলে এর অর্থ হল কোয়েরিটি কোনও সূচক ব্যবহার করছে না এবং প্রাথমিক স্টোরেজ থেকে ডকুমেন্টগুলি স্ক্যান করছে। যদি কোনও সূচক ব্যবহার করা হচ্ছে, তাহলে এক্সিকিউশন ট্রির লিফ নোড সূচকের সূচক আইডি এবং সূচক ক্ষেত্রগুলি প্রদর্শন করবে।
ব্যবহৃত সূচকটি অপ্টিমাইজ করা যায় কিনা তা চিহ্নিত করুন।
একটি সূচক একটি কোয়েরির জন্য কার্যকর, যদি এটি কোয়েরি ইঞ্জিনের প্রাথমিক স্টোরেজ থেকে প্রয়োজনীয় নথির সংখ্যা কমাতে পারে অথবা এর ফিল্ড অর্ডারিং কোয়েরির Sort প্রয়োজনীয়তা প্রদান করতে পারে।
যদি কোনও কোয়েরির জন্য একটি সূচক ব্যবহার করা হয়, কিন্তু কোয়েরি ইঞ্জিন এখনও অনেক ডকুমেন্ট আনয়ন এবং বাতিল করে, যেমনটি একটি স্ক্যান নোড দ্বারা চিহ্নিত করা হয় যা অনেক রেকর্ড ফেরত দেয় এবং তারপরে একটি ফিল্টার নোড যা কয়েকটি রেকর্ড ফেরত দেয়, এটি একটি লক্ষণ যে সূচক ব্যবহার করে সন্তুষ্ট কোয়েরি প্রিডিকেট নির্বাচনী নয়। আরও উপযুক্ত সূচক তৈরি করতে, সূচী তৈরি করুন দেখুন।
যদি কোনও কোয়েরির জন্য একটি নন-মাল্টিকি ইনডেক্স ব্যবহার করা হয়, কিন্তু কোয়েরি ইঞ্জিনটি এখনও ফলাফল সেটের ইন-মেমরি পুনর্বিন্যাস সম্পাদন করে, যেমনটি কোয়েরি এক্সিকিউশন ট্রিতে একটি MajorSort নোড দ্বারা চিহ্নিত করা হয়েছে, তাহলে এটি একটি লক্ষণ যে ব্যবহৃত ইনডেক্সটি কোয়েরির Sort প্রয়োজনীয়তা সরবরাহ করতে ব্যবহার করা যাবে না। আরও উপযুক্ত ইনডেক্স তৈরি করতে, পরবর্তী বিভাগটি দেখুন।
$lookup এর জন্য সূচক
$lookup পর্যায়ের কর্মক্ষমতা উন্নত করতে, from সংগ্রহের foreignField এ একটি সূচক তৈরি করুন। এটি join অপারেশনকে সম্পূর্ণ সংগ্রহ স্ক্যান না করেই from সংগ্রহের সাথে মিলে যাওয়া নথিগুলি দক্ষতার সাথে খুঁজে পেতে সহায়তা করে।
সূচী তৈরি করুন
ইনডেক্স তৈরি করতে ইনডেক্স ম্যানেজমেন্ট ডকুমেন্টেশন অনুসরণ করুন। আপনার কোয়েরি ইনডেক্স ব্যবহার করতে পারে তা নিশ্চিত করার জন্য, নিম্নলিখিত ক্রমানুসারে ফিল্ড সহ নিয়মিত (মাল্টিকি নয়) ইনডেক্স তৈরি করুন:
- সমতা অপারেটরগুলিতে ব্যবহৃত সকল ক্ষেত্র। কোয়েরিগুলিতে পুনঃব্যবহারের সম্ভাবনা সর্বাধিক করার জন্য, কোয়েরিগুলির মধ্যে সমতা অপারেটরগুলিতে ক্ষেত্রগুলির উপস্থিতির ক্রম অনুসারে ক্ষেত্রগুলি সাজান।
- সমস্ত ক্ষেত্র যা (একই ক্রমে) সাজানো হবে।
- ক্যোয়ারী সীমাবদ্ধতা নির্বাচনের ক্রমহ্রাসমান ক্রমে পরিসর বা অসমতা অপারেটরগুলিতে ব্যবহৃত ক্ষেত্রগুলি।
- সূচীতে কোয়েরির অংশ হিসেবে যেসব ক্ষেত্র ফেরত পাঠানো হবে: সূচীতে এই ধরনের ক্ষেত্র অন্তর্ভুক্ত করলে সূচীটি কোয়েরিটি কভার করতে পারবে এবং প্রাথমিক স্টোরেজ থেকে ডকুমেন্ট আনা এড়াতে পারবে।
অ্যারে ফিল্ড ফিল্টারিং এবং সাজানোর সাথে সম্পর্কিত কোয়েরির জন্য, মাল্টিকি ইনডেক্স তৈরি করার কথা বিবেচনা করুন।
কোয়েরি ইঙ্গিত ব্যবহার করুন
যদি আপনি কোয়েরির জন্য আরও উপযুক্ত একটি সূচক তৈরি করে থাকেন কিন্তু কোয়েরি ইঞ্জিন সেই সূচকটি ব্যবহার না করে, তাহলে আপনি একটি কোয়েরি ইঙ্গিত ব্যবহার করে কোয়েরি ইঞ্জিনের সূচক পছন্দকে ওভাররাইড করতে পারেন।
Query Explain দিয়ে সম্পাদিত একটি Query এর আউটপুট সম্পর্কে আরও তথ্যের জন্য, Query execution reference দেখুন।