না , মাইক্রোসফ্টের আচরণের গ্যারান্টিযুক্ত কোনও ডকুমেন্টেশন নেই, সুতরাং এটির নিশ্চয়তা নেই ।
অতিরিক্তভাবে, ধরে নিই যে সরল আলাপ নিবন্ধটি সঠিক, এবং কনটেনটেশন ফিজিক্যাল অপারেটর সর্বদা পরিকল্পনায় প্রদর্শিত ক্রমের ইনপুটগুলি প্রসেস করে (খুব সম্ভবত সত্য হতে পারে), তারপরে কোনও গ্যারান্টি ছাড়াই এসকিউএল সার্ভার সর্বদা একই রাখে এমন পরিকল্পনা তৈরি করে will ক্যোয়ারী পাঠ্য এবং ক্যোয়ারী পরিকল্পনার মধ্যে ক্রম, আপনি কেবল কিছুটা ভাল আছেন।
যদিও আমরা এটি আরও তদন্ত করতে পারি। যদি ক্যোয়ারী অপ্টিমাইজার কনটেনটেশন অপারেটর ইনপুটটিকে পুনরায় অর্ডার করতে সক্ষম হয় তবে সেই অপটিমাইজেশনের সাথে মিলে অনাবন্ধিত ডিএমভিতে সারি থাকা উচিত sys.dm_exec_query_transformation_stats
।
SELECT * FROM sys.dm_exec_query_transformation_stats
WHERE name LIKE '%CON%' OR name LIKE '%UNIA%'
এসকিউএল সার্ভার 2012 এন্টারপ্রাইজ সংস্করণে, এটি 24 টি সারি তৈরি করে। ধ্রুবকগুলির সাথে সম্পর্কিত রূপান্তরগুলির জন্য মিথ্যা ম্যাচগুলি উপেক্ষা করে কনক্যাটেনেশন ফিজিক্যাল অপারেটর UNIAtoCON
(ইউনিয়ন অল টু কনকনাটেশন) সম্পর্কিত একটি রূপান্তর রয়েছে । সুতরাং, শারীরিক অপারেটর স্তরে, এটি প্রদর্শিত হয় যে একবার কংক্রিটেশন অপারেটরটি নির্বাচিত হয়ে গেলে এটি লজিক্যাল ইউনিয়ন অনুসারে প্রসেস করা হবে সমস্ত অপারেটর এটি থেকে প্রাপ্ত।
বাস্তবে তা মোটেই সত্য নয়। পোস্ট-অপ্টিমাইজেশান পুনরায় লেখাগুলি বিদ্যমান রয়েছে যা ব্যয়ভিত্তিক অপ্টিমাইজেশানটি শেষ হওয়ার পরে কোনও শারীরিক সংমিশ্রণ অপারেটরের ইনপুটগুলিকে পুনঃক্রম করতে পারে। একটি উদাহরণ ঘটে যখন কনটেনটেশন একটি সারি লক্ষ্য সাপেক্ষে (সুতরাং প্রথমে সস্তা ইনপুট থেকে পড়া গুরুত্বপূর্ণ হতে পারে)। আরও তথ্যের জন্য পল হোয়াইটের UNION ALL
অপ্টিমাইজেশন দেখুন ।
এই দেরিতে শারীরিক পুনর্লিখনটি এসকিউএল সার্ভার ২০০৮ আর 2 সহ কার্যকর ছিল এবং একটি প্রতিরোধের অর্থ এটি আর এসকিউএল সার্ভার ২০১২ এবং তার পরে প্রয়োগ করা হয়নি। একটি ফিক্স জারি করা হয়েছে যা এসকিউএল সার্ভার ২০১৪ এবং তারপরে (2012 নয়) কোয়েরি অপ্টিমাইজার হটফিক্সগুলি সক্ষম করেছে (উদাহরণস্বরূপ ট্রেস ফ্ল্যাগ 4199) দিয়ে এই পুনর্লিখনটি পুনরায় স্থাপন করে।
কিন্তু লজিকাল ইউনিয়ন সম্পর্কে সমস্ত অপারেটর ( UNIA
)? একটি UNIAReorderInputs
রূপান্তর আছে, যা ইনপুটগুলিকে পুনঃক্রম করতে পারে। এছাড়াও দুটি শারীরিক অপারেটর রয়েছে যা লজিকাল ইউনিয়ন অল, UNIAtoCON
এবং UNIAtoMERGE
(ইউনিয়ন অল টু মার্জ ইউনিয়ন) প্রয়োগ করতে ব্যবহার করা যেতে পারে ।
সুতরাং এটি প্রদর্শিত হয় যে ক্যোয়ারী অপ্টিমাইজারটি কোনওটির জন্য ইনপুটগুলিকে পুনঃক্রম করতে পারেUNION ALL
; যাইহোক, এটা একটি সাধারণ রূপান্তর হতে বলে মনে হচ্ছে না (এর শূন্য ব্যবহারসমূহ UNIAReorderInputs
এসকিউএল সার্ভার উপর আমি নির্দ্ধিধায় অ্যাক্সেসযোগ্য আছে আমরা পরিস্থিতিতে যে অপটিমাইজার ব্যবহার করতে হবে জানি না। UNIAReorderInputs
; যদিও এটা অবশ্যই ব্যবহার করা হয় একটি পরিকল্পনা নির্দেশিকা বা ব্যবহারের যখন পরিকল্পনার ইঙ্গিতটি উপরে উল্লিখিত সারি লক্ষ্য শারীরিকভাবে পুনরায় অর্ডার করা ইনপুট ব্যবহার করে উত্পন্ন পরিকল্পনাকে জোর করতে ব্যবহৃত হয়।
ইঞ্জিন প্রক্রিয়াটি কি একবারে একাধিক ইনপুট রাখার উপায় আছে?
কনটেনটেশন ফিজিক্যাল অপারেটর কোনও পরিকল্পনার সমান্তরাল বিভাগের মধ্যে থাকতে পারে। কিছুটা অসুবিধা নিয়ে আমি নীচের ক্যোয়ারীটি ব্যবহার করে সমান্তরাল যুক্তি দিয়ে একটি পরিকল্পনা তৈরি করতে সক্ষম হয়েছি:
SELECT userid, regdate FROM ( --Users table is around 3mil rows
SELECT userid, RegDate FROM users WHERE userid > 1000000
UNION
SELECT userid, RegDate FROM users WHERE userid < 1000000
UNION all
SELECT userid, RegDate FROM users WHERE userid < 2000000
) d ORDER BY RegDate OPTION (RECOMPILE)
সুতরাং, কঠোর অর্থে, শারীরিক কংকেটেনশন অপারেটর সর্বদা একটি সামঞ্জস্যপূর্ণ ফ্যাশনে ইনপুটগুলি প্রক্রিয়া করে দেখায় (শীর্ষ প্রথম, নীচে দ্বিতীয়); তবে, অপ্টিমাইজারটি শারীরিক অপারেটর বাছাই করার আগে ইনপুটগুলির ক্রমটি স্যুইচ করতে পারে, বা কনক্যাটেনেশনের পরিবর্তে মার্জ ইউনিয়ন ব্যবহার করতে পারে।