আমার সমস্যা (বা কমপক্ষে ত্রুটির বার্তা) খুব ক্যোয়ারী প্রসেসরের সাথে অভ্যন্তরীণ সংস্থানসমূহের বাইরে চলে এসেছে - অত্যন্ত দীর্ঘ এসকিএল কোয়েরি ।
আমার গ্রাহক একটি এসকিউএল নির্বাচন-ক্যোয়ারী নিয়ে কাজ করছেন, যেখানে হ'ল শুল্ক সহ 100,000 এন্ট্রি রয়েছে।
ক্যোয়ারী ত্রুটি 8632 এবং ত্রুটি বার্তায় ব্যর্থ হচ্ছে
অভ্যন্তরীণ ত্রুটি: একটি অভিব্যক্তি পরিষেবা সীমাতে পৌঁছেছে। আপনার প্রশ্নে সম্ভাব্য জটিল এক্সপ্রেশনটি দেখুন এবং সেগুলি সরল করার চেষ্টা করুন))
আমি এটি খুব অদ্ভুত বলে মনে করি যে এই ত্রুটি বার্তাটি ঠিক 100,000 এন্ট্রিতে নিক্ষেপ করা হয়েছে, তাই আমি ভাবছি এটি কনফিগারযোগ্য মান কিনা। এটি কি এই ক্ষেত্রে এবং হ্যাঁ ক্ষেত্রে, আমি কীভাবে এই মানটিকে আরও উচ্চতর করে তুলতে পারি?
উপর দুটিই MSDN সেখানে প্রস্তাব ক্যোয়ারী পুনরায় পুনর্লিখন, কিন্তু আমি এই সমস্যা এড়ানোর করতে চাই।
ইতিমধ্যে আমি জানতে পেরেছি যে আমি যে এন্ট্রিগুলির কথা বলছি তার তালিকায় প্রাকৃতিক সংখ্যা রয়েছে, তাদের বেশিরভাগটি অনুক্রমিক বলে মনে হচ্ছে (এরকম কিছু (1,2,3,6,7,8,9,10,12, 13,15,16,17,18,19,20)।
এটি এসকিউএলকে যেখানে ক্লজ-এর মতো কিছু করে তোলে:
where entry in (1,2,3,6,7,8,9,10,12,13,15,16,17,18,19,20)
আমি এটিকে রূপান্তর করতে পারি:
where (entry between 1 and 3) OR
(entry between 6 and 10) OR
(entry between 12 and 13) OR
(entry between 15 and 20)
এটি কি সংক্ষিপ্ত করা যেতে পারে:
where entry in (1,...,3,6,...,10,12,13,15,...,20)
... নাকি এরকম কিছু? (আমি জানি এটি একটি দীর্ঘ শট, তবে এটি সফ্টওয়্যার আপডেটগুলি আরও সহজ এবং আরও পঠনযোগ্য করে তুলবে)
আপনার তথ্যের জন্য: হ'ল-ক্লজে থাকা ডেটা হ'ল একটি গণনার ফলাফল যা অন্য টেবিলে করা হয়: প্রথমে সেই টেবিলের এন্ট্রিগুলি শুরুতে পড়া এবং ফিল্টার করা হয়, তারপরে কিছু অতিরিক্ত প্রক্রিয়াজাতকরণ করা হয় (যা ব্যবহার করা অসম্ভব) এসকিউএল), সেই অতিরিক্ত প্রক্রিয়াজাতকরণের ফলাফল আরও বেশি ফিল্টারিং হয় এবং এর ফলাফল যেখানে-ক্লজটিতে ব্যবহৃত হয়। এসকিউএল-তে সম্পূর্ণ ফিল্টারিং লেখা অসম্ভব বলে, উল্লিখিত পদ্ধতিটি ব্যবহার করা হয়েছে। স্পষ্টতই যেখানে প্রবন্ধের সামগ্রীটি প্রতিটি প্রক্রিয়াকরণে পরিবর্তিত হতে পারে, তাই গতিশীল সমাধানের প্রয়োজন।
WHERE IN
এই ধরণের রেঞ্জ সিনট্যাক্স সমর্থন করে না। এছাড়াও, এটি ও হওয়া উচিতWHERE () OR () OR ()
নয়। তবে ব্রেন্টের পরামর্শটি ব্যবহার করার জন্য আপনাকে আসলে পুরো ক্যোয়ারীটি পরিবর্তন করতে হবে না, আপনি কেবল এটি করতে পারেনWHERE IN (SELECT myID FROM #biglist)
। এবং#biglist
হয় একটি বাস্তব (স্থায়ী) টেবিল হতে পারে, বা আপনি ঝাঁকুনিতে তৈরি একটি টেম্প টেবিল।