আপনার প্রশ্নটি কী সমাধান করবে তা হ'ল JOIN DECOMPOSITION subject
বইয়ের পৃষ্ঠা 209 অনুসারে
আপনি একটি বহুসংখ্যক যোগদানের পরিবর্তে একাধিক একক-টেবিল ক্যোয়ারী চালিয়ে কোনও অ্যাপ্লিকেশন পচন করতে পারেন এবং তারপরে অ্যাপ্লিকেশনটিতে যোগদানটি সম্পাদন করতে পারেন। উদাহরণস্বরূপ, এই একক প্রশ্নের পরিবর্তে:
SELECT * FROM tag
JOIN tag_post ON tag_post.tag_id = tag.id
JOIN post ON tag_post.post_id = post.id
WHERE tag.tag = 'mysql';
আপনি এই প্রশ্নগুলি চালাতে পারেন:
SELECT * FROM tag WHERE tag = 'mysql';
SELECT * FROM tag_post WHERE tag_id=1234;
SELECT * FROM post WHERE post.id IN (123,456,567,9098,8904);
কেন পৃথিবীতে আপনি এই কাজ করবেন? এটি প্রথম নজরে অপ্রয়োজনীয় দেখায়, কারণ আপনি বিনিময়ে কিছু না পেয়ে প্রশ্নের সংখ্যা বাড়িয়েছেন। যাইহোক, এই জাতীয় পুনর্গঠন আসলে কার্য সম্পাদনের উল্লেখযোগ্য সুবিধা দিতে পারে:
- ক্যাচিং আরও দক্ষ হতে পারে। অনেক অ্যাপ্লিকেশন ক্যাশে "অবজেক্টস" যা টেবিলগুলিতে সরাসরি মানচিত্র করে। এই উদাহরণস্বরূপ, ট্যাগযুক্ত বস্তুটি
mysql
ইতিমধ্যে ক্যাশে করা থাকলে, অ্যাপ্লিকেশনটি প্রথম ক্যোয়ারি এড়িয়ে যাবে। আপনি ক্যাশে 123, 567 বা 908 এর আইডি সহ পোস্টগুলি খুঁজে পেলে আপনি সেগুলি IN()
তালিকা থেকে সরাতে পারেন । ক্যোয়ারী ক্যাশে এই কৌশলটি থেকেও উপকৃত হতে পারে। যদি কেবলমাত্র কোনও একটি টেবিল ঘন ঘন পরিবর্তিত হয় তবে একটি জয়েন পচিয়ে দেওয়া ক্যাশে অবৈধতার সংখ্যা হ্রাস করতে পারে।
- প্রশ্নগুলি পৃথকভাবে সম্পাদন করা কখনও কখনও লক বিরোধকে হ্রাস করতে পারে
- অ্যাপ্লিকেশনটিতে যোগদান করে তা বিভিন্ন সার্ভারে টেবিল রেখে ডেটাবেস স্কেল করা সহজ করে তোলে।
- প্রশ্নগুলি নিজেরাই আরও দক্ষ হতে পারে। এই উদাহরণে,
IN()
যোগদানের পরিবর্তে একটি তালিকা ব্যবহার করে মাইএসকিউএল সারি আইডিগুলি সাজিয়ে দেয় এবং একটি যোগদানের সাথে যতটা সম্ভব সম্ভব তার চেয়ে সারিগুলি আরও সুনির্দিষ্টভাবে পুনরুদ্ধার করতে দেয়।
- আপনি অপ্রয়োজনীয় সারি অ্যাক্সেসগুলি হ্রাস করতে পারেন। অ্যাপ্লিকেশনটিতে যোগদান করা মানে প্রতিটি সারিটি একবারে পুনরুদ্ধার করা, যদিও কোয়েরিতে একটি যোগদান মূলত একটি অস্বীকৃতি যা বারবার একই ডেটা অ্যাক্সেস করতে পারে। একই কারণে, এই ধরনের পুনর্গঠন মোট নেটওয়ার্ক ট্র্যাফিক এবং মেমরির ব্যবহারকে হ্রাস করতে পারে।
- কিছুটা হলেও, আপনি এই কৌশলটি ম্যানুয়ালি একটি হ্যাশ জয়েনকে নেস্টেড লুপস অ্যালগরিদম মাইএসকিউএল পরিবর্তে কোনও জোড় কার্যকর করার জন্য ব্যবহার হিসাবে প্রয়োগ করতে পারেন। একটি হ্যাশ জোড় আরও কার্যকর হতে পারে।
ফলস্বরূপ, অ্যাপ্লিকেশনটিতে যোগদানগুলি করানো আরও কার্যকর হতে পারে যখন আপনি পূর্ববর্তী ক্যোয়ারীগুলি থেকে প্রচুর ডেটা ক্যাশে এবং পুনরায় ব্যবহার করেন, আপনি একাধিক সার্ভারের মাধ্যমে ডেটা বিতরণ করেন, আপনি IN()
তালিকাগুলির সাথে যোগ দিয়ে প্রতিস্থাপন করেন , বা যোগদানের ক্ষেত্রে একই টেবিলে একাধিকবার উল্লেখ করা হয়।
পর্যবেক্ষণ
আমি প্রথম বুলেটপয়েন্টটি পছন্দ করি কারণ যখন ক্যোয়ারী ক্যাশে ক্রস করে থাকে তখন ইনোডিবি একটু ভারী হাতে থাকে।
শেষ বুলেটপয়েন্ট হিসাবে, আমি 11 ই মার্চ, 2013 তে ফিরে একটি পোস্ট লিখেছিলাম (কোন জিন শর্ত এবং কোন শর্তের মধ্যে একটি মৃত্যুদন্ডের পার্থক্য রয়েছে? ) যা নীস্টযুক্ত লুপ অ্যালগরিদমের বর্ণনা দেয়। এটি পড়ার পরে, আপনি দেখতে পাবেন যে ভাল পচে যাওয়া পচন হতে পারে।
বইয়ের অন্যান্য সমস্ত পয়েন্ট হিসাবে , বিকাশকারীরা নীচের অংশ হিসাবে সত্যই পারফরম্যান্সের সন্ধান করে। কিছু কর্মক্ষমতা বর্ধনের জন্য বাহ্যিক উপায়ে (অ্যাপ্লিকেশনের বাইরে) নির্ভর করে যেমন দ্রুত ডিস্ক ব্যবহার করে, আরও সিপিইউ / কোর পান, স্টোরেজ ইঞ্জিনটি সুর করে এবং কনফিগারেশন ফাইলটি টিউন করে। অন্যরা বাকল করে আরও ভাল কোড লিখবে। কিছু সজ্জিত পদ্ধতিতে সমস্ত ব্যবসায়ের বুদ্ধিমত্তাকে কোডিংয়ের অবলম্বন করতে পারে তবে তবুও যোগ পচানোর আবেদন করতে পারেন না (দেখুন অন্যান্য পোস্টগুলির সাথে ডেটাবেস স্তরটিতে অ্যাপ্লিকেশন লজিকের বিরুদ্ধে বা যুক্তির যুক্তিগুলি কী? ) এটি প্রতিটি বিকাশকারী দোকানের সংস্কৃতি এবং সহনশীলতার উপর নির্ভর করে।
কিছু পারফরম্যান্সে সন্তুষ্ট হতে পারে এবং কোডটি আর স্পর্শ না করে। অন্যান্যরা সহজেই বুঝতে পারেন না যে তারা যদি রচনাতে যোগদানের চেষ্টা করেন তবে তারা যে কাটতে পারে সেগুলি লাভ করতে পারে।
যারা বিকাশকারী তাদের জন্য ইচ্ছুক ...
একবার চেষ্টা করে দেখো !!!