আপনি কোয়েরিটি আবার লিখতে ভাল হবে:
SELECT payments.*
FROM customers
JOIN payments
ON payments.id_customer = customers.id
WHERE customers.id_project = 5
যদিও এটি কম সংক্ষিপ্ত বলে মনে হচ্ছে এবং একটি ভাল ক্যোয়ার পরিকল্পনাকারী উপরের যোগ হিসাবে পরিবর্তিত হিসাবে আপনি কী করতে চাইছেন এবং আপনার পরস্পর সম্পর্কিত সাব-কোয়েরিটি চালাচ্ছেন তা দেখবেন, কোনও খারাপ ক্যোয়ারার পরিকল্পনাকারীর সূচক স্ক্যানটি শেষ হতে পারে payments.id_customer
(ধরে নিলে আপনার কোনও প্রাসঙ্গিক সূচক রয়েছে) ) (বা আরও খারাপ, টেবিল স্ক্যানিং) জিনিসগুলি আরও কার্যকর উপায়ে করার পরিবর্তে। এমনকি যদি একটি ভাল ক্যোয়ারী পরিকল্পনাকারী এই কোয়েরির বিন্যাস আরও জটিল কিছুতে মোড়ানো থাকে তবে অপ্টিমাইজেশনটি দেখতে ব্যর্থ হতে পারে। সাব-কোয়েরির পরিবর্তে যোগটিকে যোগ হিসাবে প্রকাশ করা আপনার ডেটা কাঠামো পরিবর্তনের চেয়ে আরও বেশি পার্থক্য আনতে পারে।
জেফ যেমন বলেছিলেন, কোনও অস্বীকৃতি বিবেচনার সাথে বিবেচনা করা উচিত - এটি বিশেষত কিছু প্রতিবেদনের উদ্দেশ্যে, পারফরম্যান্সকে সহজতর করতে পারে তবে সমর্থনকারী ব্যবসায়ের যুক্তিতে বাগের কারণে অসঙ্গতি হতে পারে।
পার্শ্ব নোট হিসাবে: অবশ্যই আমি আপনার ব্যবসা জানি না তাই আমি কিছু অনুপস্থিত হতে পারে, তবে আপনার টেবিলের সম্পর্কগুলি আমার কাছে অদ্ভুত বলে মনে হচ্ছে। তারা বোঝায় যে আপনি একই গ্রাহকের সাথে একাধিক প্রকল্প কখনও নিতে পারবেন না যা কমপক্ষে দীর্ঘ সময়ের মধ্যে আমার অভিজ্ঞতাতে সত্য নয় over
customer project payment
-------- -------- -------
pa_id
pr_id <-- payment
cu_id <-- customer
বা যদি কম স্বাভাবিক করা হয় (যদিও আমি সন্দেহ করি যে এটি প্রয়োজনীয় হবে):
customer project payment
-------- -------- --------
pa_id
pr_id <-- payment
cu_id <-- customer
`------------- customer
অবশ্যই এখনও দুটি গ্রাহকের সাথে একটি যৌথ প্রকল্পের সম্ভাবনাটি ছাড় দেয় ...