সম্পাদনা: +1 এই পরিস্থিতিতে কাজ করে কারণ এটি প্রমাণ করে যে FILE_NUMBER
এটি একটি পূর্ণসংখ্যার শূন্য প্যাডযুক্ত স্ট্রিং সংস্করণ। স্ট্রিংগুলির জন্য এখানে আরও ভাল সমাধান যুক্ত করা ''
(খালি স্ট্রিং) সংযোজন করা হয়, কারণ একটি মান সংযোজন ক্রমকে প্রভাবিত করতে পারে বা সংখ্যার জন্য এমন কিছু যুক্ত করতে পারে যা একটি ধ্রুবক তবে একটি অ-নিরোধক ফাংশন ধারণ করে sign(rand()+1)
। 'বাছাই ভাঙ্গা' ধারণাটি এখানে এখনও বৈধ, এটি কেবল আমার পদ্ধতিটি আদর্শ ছিল না।
+1 টি
না, আমি বোঝাতে চাই না যে আমি কোনও কিছুর সাথে একমত হচ্ছি, এর অর্থ একটি সমাধান হিসাবে। আপনি যদি আপনার ক্যোয়ারিতে পরিবর্তন করেন ORDER BY cj.FILE_NUMBER + 1
তবে the TOP 1
ক্যটি অন্যরকম আচরণ করবে।
আপনি দেখুন, একটি অর্ডার করা ক্যোয়ারির জন্য স্থানে থাকা ছোট সারি লক্ষ্য সহ, সিস্টেমটি বাছাই করা অপারেটরটি এড়াতে ক্রম অনুযায়ী ডেটা গ্রাস করার চেষ্টা করবে। এটি একটি হ্যাশ টেবিল তৈরি করা এড়াতে সক্ষম হবে, এটি নির্ধারণ করে যে প্রথম সারিতে এটি খুঁজে পেতে সম্ভবত খুব বেশি কাজ করতে হবে না। আপনার ক্ষেত্রে, এটি ভুল - এই তীরগুলির পুরুত্ব থেকে দেখে মনে হচ্ছে এটি একটি একক ম্যাচ সন্ধান করতে প্রচুর ডেটা গ্রহণ করতে হবে।
এই তীরগুলির ঘনত্ব সূচিত করে যে আপনার DOCUMENT_QUEUE
(ডিকিউ) টেবিলটি আপনার CORRESPONDENCE_JOURNAL
(সিজে) টেবিলের চেয়ে অনেক ছোট । এবং সর্বোত্তম পরিকল্পনাটি হ'ল কোনও সিজে সারি পাওয়া না পাওয়া পর্যন্ত ডি কিউ সারিগুলি পরীক্ষা করা। প্রকৃতপক্ষে, কোয়েরি অপ্টিমাইজার (কিউ) এটি করবে যদি এটির ORDER BY
মধ্যে এই সমস্যাটি না থাকে, এটি সিজেতে একটি আচ্ছাদন সূচক দ্বারা খুব সুন্দরভাবে সমর্থিত।
সুতরাং আপনি যদি ORDER BY
পুরোপুরি বাদ পড়ে থাকেন , আমি আশা করি আপনি এমন একটি পরিকল্পনা পেয়ে যাবেন যা একটি নেস্টেড লুপের সাথে জড়িত ছিল, ডি কিউয়ের সারিগুলিতে পুনরাবৃত্তি করে, সিলের উপস্থিতি নিশ্চিত করার জন্য সিজে সন্ধান করে। এবং সহ TOP 1
, এটি একটি একক সারি টানা যাওয়ার পরে থামবে।
তবে যদি আপনার আসলে প্রথম সারির ক্রমটি প্রয়োজন হয় তবে আপনি সিস্টেমটিকে সেই সূচকটিকে FILE_NUMBER
উপেক্ষা করার কৌশলটি তৈরি করতে পারেন যা (ভুলভাবে) এতটা সহায়ক হতে পারে তা করে ORDER BY CJ.FILE_NUMBER+1
- যা আমরা জানি যে পূর্বের মতো একই ক্রমটি রাখবে, তবে গুরুত্বপূর্ণভাবে কিউও না। কিউও পুরো সেটটি শেষ করার দিকে মনোনিবেশ করবে, যাতে শীর্ষস্থানীয় এন বাছাই করা অপারেটর সন্তুষ্ট হতে পারেন। এই পদ্ধতির একটি পরিকল্পনা তৈরি করতে হবে যাতে অর্ডার করার মানটি বের করার জন্য একটি কম্পিউট স্কেলার অপারেটর এবং প্রথম সারিতে একটি শীর্ষ এন বাছাই করা অপারেটর রয়েছে। তবে এর ডানদিকে আপনার সিজেতে প্রচুর সিক্স করা, একটি সুন্দর নেস্টেড লুপ দেখতে হবে। এবং সারিগুলির একটি বৃহত টেবিলের মধ্য দিয়ে চলার চেয়ে ভাল পারফরম্যান্স যা ডিকিউতে কোনও কিছুর সাথে মেলে না।
হ্যাশ ম্যাচটি অগত্যা জঘন্য নয়, তবে আপনি যদি ডি কিউ থেকে ফিরে আসা সারিগুলির সেটটি সিজে থেকে অনেক ছোট হন (যেমনটি আমি এটি প্রত্যাশা করতাম), তবে হ্যাশ ম্যাচটি সিজে-তে আরও অনেক কিছু স্ক্যান করে চলেছে is এটি প্রয়োজন তুলনায়।
দ্রষ্টব্য: আমি +0 এর পরিবর্তে +1 ব্যবহার করেছি কারণ ক্যোয়ারী অপ্টিমাইজারটি সম্ভবত এটি চিনতে পারে যে +0 কিছুই পরিবর্তন করে না। অবশ্যই, একই জিনিসটি এখন +1 এ প্রয়োগ করা যেতে পারে, যদি এখন না হয় তবে ভবিষ্যতের কোনও সময়ে।
DOCUMENT_ID
রয়েছে যা দুটি টেবিলের মধ্যে সম্পর্ককে কার্যকর করে (বা প্রতিটি রেকর্ডের সাথেCORRESPONDENCE_JOURNAL
কোনও মিলের রেকর্ড রয়েছেDOCUMENT_QUEUE
)?