আসল প্রশ্ন হ'ল: এই রেকর্ডগুলির কি এক-একের সম্পর্ক বা এক-একের মধ্যে অনেকগুলি সম্পর্ক রয়েছে ?
টিএলডিআর উত্তর:
যদি ওয়ান-টু ওয়ান হয় তবে একটি JOIN
বিবৃতি ব্যবহার করুন ।
যদি এক থেকে অনেকগুলি SELECT
হয় তবে সার্ভার-সাইড কোড অপটিমাইজেশন সহ একটি (বা অনেক) বিবৃতি ব্যবহার করুন।
অপ্টিমাইজেশনের জন্য কেন এবং কীভাবে নির্বাচন করুন
SELECT
এক-একাধিক সম্পর্কের উপর ভিত্তি করে রেকর্ডের বৃহত গ্রুপে 'ইনগ (একত্রিত হওয়ার পরিবর্তে একাধিক প্রশ্নের সাথে) যুক্ত হয়ে একটি অনুকূল দক্ষতা তৈরি করে, কারণ JOIN
' আইং-এর ক্ষতিকারক মেমরি ফাঁসের সমস্যা রয়েছে। সমস্ত ডেটা গ্র্যাব করুন, তারপরে সাজানোর জন্য একটি সার্ভার-সাইড স্ক্রিপ্টিং ভাষা ব্যবহার করুন:
SELECT * FROM Address WHERE Personid IN(1,2,3);
ফলাফল:
Address.id : 1 // First person and their address
Address.Personid : 1
Address.City : "Boston"
Address.id : 2 // First person's second address
Address.Personid : 1
Address.City : "New York"
Address.id : 3 // Second person's address
Address.Personid : 2
Address.City : "Barcelona"
এখানে, আমি একটি নির্বাচনী বিবৃতিতে সমস্ত রেকর্ড পাচ্ছি। এটি এর চেয়ে ভাল JOIN
, যা এই রেকর্ডগুলির একটি ছোট গ্রুপ পাবে, একসময় একসময় অন্য কোয়েরির উপ-উপাদান হিসাবে। তারপরে আমি এটিকে সার্ভার-সাইড কোড দিয়ে পার্স করব যা দেখে মনে হচ্ছে ...
<?php
foreach($addresses as $address) {
$persons[$address['Personid']]->Address[] = $address;
}
?>
যখন অপ্টিমাইজেশনের জন্য যোগদান না করা
JOIN
'একক রেকর্ডের সাথে এক-একের সম্পর্কের ভিত্তিতে রেকর্ডের একটি বৃহত গ্রুপকে যুক্ত করা SELECT
একের পর এক বিবৃতিগুলির তুলনায় সর্বোত্তম দক্ষতা অর্জন করে , যা কেবল পরবর্তী রেকর্ডের ধরণটি পায় get
কিন্তু JOIN
অদক্ষ হলে একের সাথে অধিকের সম্পর্ক সঙ্গে রেকর্ড পেয়ে যায়।
উদাহরণ: ডাটাবেস ব্লগগুলিতে 3 টি টেবিলের আগ্রহ, ব্লগপোস্ট, ট্যাগ এবং মন্তব্য রয়েছে।
SELECT * from BlogPost
LEFT JOIN Tag ON Tag.BlogPostid = BlogPost.id
LEFT JOIN Comment ON Comment.BlogPostid = BlogPost.id;
যদি 1 টি ব্লগপোস্ট, 2 ট্যাগ এবং 2 টি মন্তব্য থাকে তবে আপনি ফলাফল পাবেন:
Row1: tag1, comment1,
Row2: tag1, comment2,
Row3: tag2, comment1,
Row4: tag2, comment2,
প্রতিটি রেকর্ডটি কীভাবে সদৃশ হয় তা লক্ষ্য করুন। ঠিক আছে, সুতরাং, 2 মন্তব্য এবং 2 ট্যাগ 4 সারি। যদি আমাদের 4 টি মন্তব্য এবং 4 টি ট্যাগ থাকে? আপনি 8 টি সারি পান না - আপনি 16 টি সারি পান:
Row1: tag1, comment1,
Row2: tag1, comment2,
Row3: tag1, comment3,
Row4: tag1, comment4,
Row5: tag2, comment1,
Row6: tag2, comment2,
Row7: tag2, comment3,
Row8: tag2, comment4,
Row9: tag3, comment1,
Row10: tag3, comment2,
Row11: tag3, comment3,
Row12: tag3, comment4,
Row13: tag4, comment1,
Row14: tag4, comment2,
Row15: tag4, comment3,
Row16: tag4, comment4,
আরও সারণী, আরও রেকর্ডস ইত্যাদি যোগ করুন এবং সমস্যাটি শত শত সারিতে দ্রুত ফুলে উঠবে যেগুলি বেশিরভাগই অপ্রয়োজনীয় ডেটাতে পূর্ণ ।
এই সদৃশগুলি আপনার জন্য কী ব্যয় করে? মেমরি (এসকিউএল সার্ভারে এবং কোডটি যা নকলগুলি সরিয়ে দেওয়ার চেষ্টা করে) এবং নেটওয়ার্কিং সংস্থানসমূহ (এসকিউএল সার্ভার এবং আপনার কোড সার্ভারের মধ্যে)।
সূত্র: https://dev.mysql.com/doc/refman/8.0/en/nested-join-optimization.html ; https://dev.mysql.com/doc/workbench/en/wb-relationship-tools.html