মডিউল পাঠ (2/4)
ব্যাখ্যা করুন এবং বিশ্লেষণ করুন
আপনি কি কখনও ভেবে দেখেছেন কিভাবে ডাটাবেস চয়ন করে আপনার তৈরি করা সেই সুন্দর সূচকটি ব্যবহার করা যায় কিনা? যত তাড়াতাড়ি আপনি একটি ক্যোয়ারীতে এন্টার টিপুন (বলুন, একটি শৃঙ্খলিত গ্রুপের সাথে একটি দীর্ঘ যোগদান), ক্যোয়ারী প্ল্যানার ক্যোয়ারীটি কার্যকর করার জন্য ফ্লাইতে কয়েক ডজন কৌশল গণনা করে এবং তত্ত্বগতভাবে বিশ্বাস করা একজনকে দ্রুততম হতে বেছে নেয়।
কিন্তু একজন ডেভেলপার হিসেবে, আপনাকে ক্যোয়ারী প্ল্যানারের অন্ধকার মনের ভিতরে দেখতে সক্ষম হতে হবে।
ব্যাখ্যা করুন
পরিকল্পনাকারী কীভাবে এগিয়ে যেতে চায় তা আবিষ্কার করতে, আপনার প্রশ্নের শুরুতে জাদু শব্দটি EXPLAIN রাখুন৷
EXPLAIN SELECT * FROM orders WHERE status = 'delivered';ফলাফল আদেশ হবে না! পরিবর্তে, আপনি আউটপুটে পরিকল্পনাটি দেখতে পাবেন (আনুমানিক পরিসংখ্যান সহ):
Seq Scan on orders (cost=0.00..25.88 rows=15 width=40)
Filter: (status = 'delivered'::text)এটি আমাদের বলে:
- প্ল্যানার একটি Seq Scan ব্যবহার করবে (পুরো ডিস্কের ব্রুট, সিকোয়েন্সিয়াল রিড)। কোটি কোটি অর্ডার থাকলে খারাপ।
- এটি অনুমান করে ~15 সারি ফেরত দেওয়া হবে, এবং প্রাক-লোড করা CPU চক্রে "খরচ" গণনা করে।
বিশ্লেষণ ব্যাখ্যা করুন
যদিও EXPLAIN অ্যালগরিদমিক অনুমানগুলির উপর নির্ভর করে (গত কয়েক ঘন্টার ডেটার উপর গণনা করা বিশ্বব্যাপী পরিসংখ্যানের উপর ভিত্তি করে), EXPLAIN ANALYZE আসলে বাস্তবের জন্য ক্যোয়ারী চালায় (এবং সম্পূর্ণ যৌক্তিক ফলাফলের জন্য অপেক্ষা করে), গাণিতিকভাবে পরম পদে বাস্তব অতিবাহিত সময়ের তুলনা করে।
EXPLAIN ANALYZE SELECT * FROM orders WHERE customer_id = 90;Index Scan using idx_orders_cust on orders (cost=0.15..8.13 rows=4 width=40) (actual time=0.012..0.015 rows=4 loops=1)
Index Cond: (customer_id = 90)
Planning Time: 0.081 ms
Execution Time: 0.033 msহুরে! এখানে আপনি শিখতে পারেন যে ডাটাবেসটি আমাদের সেকেন্ডারি idx_orders_cust সূচকে একটি ইনডেক্স স্ক্যান প্রয়োগ করার সিদ্ধান্ত নিয়েছে, এক সেকেন্ডের হাজার ভাগের একটি মাইক্রোস্কোপিক এক্সিকিউশন টাইম নিয়ে, লক্ষ লক্ষ সারি এড়িয়ে যাচ্ছে।
তোমার পালা
PostgreSQL কিভাবে 10 ইউনিটের নিচে বর্তমান স্টক সহ পণ্যগুলি খুঁজে পেতে চায় তা আবিষ্কার করতে একটি মৌলিক ব্যাখ্যা কমান্ড লিখুন। (এই ধাপে ANALYZE ব্যবহার করবেন না।)
ইঙ্গিত দেখান
বিদ্যমান বিবৃতির শুরুতে শুধু EXPLAIN শব্দটি পূর্বে লিখুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
সত্য মেট্রিক্স পাওয়া
আমরা একটি গাণিতিকভাবে অনুমান করা স্কেচ নয়, একটি বাস্তব কর্মক্ষমতা নির্ণয় (সময় এবং চক্র) চাই৷\nঅধ্যয়নের জন্য উত্সর্গীকৃত বিবৃতিটি ব্যবহার করুন, বাস্তবে এটি চালিয়ে, 1লা জানুয়ারী 2025 এর আগে সাইন আপ করা সমস্ত 'গ্রাহকদের' সন্ধান করুন ('signed_up_on' <'2025-01)৷
ইঙ্গিত দেখান
EXPLAIN এর ঠিক পরে ANALYZE শব্দটি যোগ করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ