আমি মনে করি না ভীষণ ধীর হয়ে যাওয়ার সাথে এর কোনও সম্পর্ক আছে; এটি সম্ভাব্যরূপে ভুল হওয়ার সাথে সম্পর্কযুক্ত। উদাহরণস্বরূপ, নিম্নলিখিত ডেটা দেওয়া - আদেশগুলি যা কোনও পৃথক গ্রাহক বা কোনও বি 2 বি অংশীদার দ্বারা স্থাপন করা যেতে পারে:
DECLARE @Customers TABLE(CustomerID INT);
INSERT @Customers VALUES(1),(2);
DECLARE @Orders TABLE(OrderID INT, CustomerID INT, CompanyID INT);
INSERT @Orders VALUES(10,1,NULL),(11,NULL,5);
ধরা যাক যে গ্রাহকরা কখনই অর্ডার দেননি তাদের সকলের সন্ধান করতে চাই। ডেটা দেওয়া হয়েছে, কেবলমাত্র একটি রয়েছে: গ্রাহক # 2। সেই তথ্যটি খুঁজে পেতে আমি কোয়েরি লেখার বিষয়ে যে তিনটি উপায় যেতে পারি তা এখানে (অন্যদের রয়েছে):
SELECT [NOT IN] = CustomerID FROM @Customers
WHERE CustomerID NOT IN (SELECT CustomerID FROM @Orders);
SELECT [NOT EXISTS] = CustomerID FROM @Customers AS c
WHERE NOT EXISTS (SELECT 1 FROM @Orders AS o
WHERE o.CustomerID = c.CustomerID);
SELECT [EXCEPT] = CustomerID FROM @Customers
EXCEPT SELECT CustomerID FROM @Orders;
ফলাফল:
NOT IN
------
-- <-- no results. Is that what you expected?
NOT EXISTS
----------
2
EXCEPT
------
2
এখন, পাশাপাশি কিছু কার্য সম্পাদনের সমস্যা রয়েছে এবং আমি তাদের সম্পর্কে এই ব্লগ পোস্টে কথা বলি । ডেটা এবং সূচকগুলির উপর নির্ভর করে NOT EXISTS
সাধারণত ছাপিয়ে যায় NOT IN
এবং আমি জানি না যে এটি আরও খারাপ পারফর্ম করতে পারে কিনা। আপনার এটিও লক্ষ্য করা উচিত যা EXCEPT
পৃথক বাছাইয়ের অপারেশন প্রবর্তন করতে পারে, যাতে আপনি বিভিন্ন ডেটা (আবার উত্সের উপর নির্ভর করে) দিয়ে শেষ করতে পারেন। এবং যে জনপ্রিয় LEFT OUTER JOIN ... WHERE right.column IS NULL
প্যাটার্ন সর্বদা সবচেয়ে খারাপ অভিনয়।
মার্টিন স্মিথের এসও-তে তার উত্তরে প্রচুর ভাল সহায়ক তথ্য রয়েছে ।
IN
/NOT IN
সর্বদা নেস্টেড লুপগুলি প্রয়োগ করা হবে। এবংstops SQL Server from creating a ‘plan’
কী বোঝাতে চাইছে তা আমার কোনও ধারণা নেই ।