এখানে সম্প্রতি এমন একটি দৃশ্য দেখা গেছে যা কাজের সময়ে এসেছিল।
এ, বি, সি তিনটি সারণী বিবেচনা করুন
এটিতে 3,000 সারি রয়েছে; বিতে 300,000,000 সারি রয়েছে; এবং সিতে 2 হাজার সারি রয়েছে।
বিদেশী কীগুলি সংজ্ঞায়িত করা হয়: বি (এ_আইডি), বি (সি_আইডি)।
ধরুন আপনার কাছে এমন একটি কোয়েরি রয়েছে যা দেখতে এরকম দেখাচ্ছে:
select a.id, c.id
from a
join b on b.a_id = a.id
join c on c.id = b.c_id
আমার অভিজ্ঞতায় মাইএসকিউএল এই ক্ষেত্রে সি -> বি -> এ যেতে পছন্দ করতে পারে। সি এ এর চেয়ে ছোট এবং বি প্রচুর পরিমাণে এবং সেগুলি সমান।
সমস্যাটি হ'ল মাইএসকিউএল প্রয়োজনীয়ভাবে (সিডি এবং বিসি_আইডি) বনাম (এডি এবং বিএআইডি) এর ছেদগুলির আকারটি বিবেচনা করে না। যদি বি এবং সি এর মধ্যে যোগসূত্রটি বি এর মতো অনেকগুলি সারি ফিরে আসে, তবে এটি খুব খারাপ পছন্দ; যদি এ থেকে শুরু করে বি এর সাথে যতগুলি সারিতে ফিল্টার করা হত তবে এটি আরও ভাল পছন্দ হত। straight_join
এই আদেশটি এইভাবে জোর করার জন্য ব্যবহৃত হতে পারে:
select a.id, c.id
from a
straight_join b on b.a_id = a.id
join c on c.id = b.c_id
এখন a
অবশ্যই আগে যোগদান করা উচিত b
।
সাধারণত আপনি এমন ক্রমে আপনার যোগদান করতে চান যা ফলাফলের সেটে সারিগুলির সংখ্যা হ্রাস করে। সুতরাং একটি ছোট টেবিল দিয়ে শুরু এবং এর ফলে যোগদানের ফলে জোড় এছাড়াও ছোট হবে, আদর্শ। ছোট টেবিল থেকে শুরু করে বড় টেবিলের সাথে যোগ দেওয়া হলে জিনিসগুলি নাশপাতি আকারের হয় বড় টেবিলের মতোই শেষ হয়।
এটি পরিসংখ্যান যদিও নির্ভর করে। ডেটা বিতরণ পরিবর্তন হলে, গণনা পরিবর্তন হতে পারে। এটি যোগদানের প্রক্রিয়া প্রয়োগের বিশদগুলির উপরও নির্ভর করে।
মাইএসকিউএল-এর জন্য আমি যে সবচেয়ে খারাপ পরিস্থিতি দেখেছি যেগুলি প্রয়োজনীয় straight_join
বা আক্রমণাত্মক সূচক ইঙ্গিত ছাড়াও হালকা ফিল্টারিংয়ের সাথে কঠোরভাবে সাজানো ক্রমে প্রচুর ডেটা পৃষ্ঠাতে উত্পন্ন প্রশ্নগুলি। মাইএসকিউএল যে কোনও ফিল্টারগুলির জন্য সূচকগুলি ব্যবহার করতে পছন্দ করে এবং বিভিন্ন প্রকারের সাথে যোগ দেয়; এটি উপলব্ধি করে কারণ বেশিরভাগ লোকেরা পুরো ডাটাবেসটি বাছাই করার চেষ্টা করছেন না বরং সারিগুলির একটি সীমাবদ্ধ উপসেট রয়েছে যা ক্যোয়ারীর কাছে প্রতিক্রিয়াশীল এবং একটি সীমাবদ্ধ সাবসেটটি বাছাই করা পুরো টেবিলটি ফিল্টারিংয়ের চেয়ে অনেক দ্রুততর, এটি সাজানো বা না কেন তা নয় matter না. এই ক্ষেত্রে, সূচিযুক্ত কলামটি সারণীটির পরে অবিলম্বে সরাসরি যুক্ত হওয়া আমি স্থির জিনিসগুলিতে বাছাই করতে চাই।
straight_join
।