এসকিউএল সার্ভার সর্বদা অপারেটরগুলির বিভাজন, বাছাই এবং সঙ্কোচন সংমিশ্রণ ব্যবহার করে যখন কোনও আপডেটের অংশ হিসাবে একটি অনন্য সূচক বজায় রাখে (বা প্রভাবিত হতে পারে) একাধিক সারি।
প্রশ্নের উদাহরণ দিয়ে কাজ করে আমরা উপস্থিত চারটি সারিটির পৃথক একক-সারি আপডেট হিসাবে আপডেটটি লিখতে পারি:
-- Per row updates
UPDATE dbo.Banana SET pk = 2 WHERE pk = 1;
UPDATE dbo.Banana SET pk = 3 WHERE pk = 2;
UPDATE dbo.Banana SET pk = 4 WHERE pk = 3;
UPDATE dbo.Banana SET pk = 5 WHERE pk = 4;
সমস্যাটি হ'ল প্রথম বিবৃতিটি ব্যর্থ হবে, যেহেতু এটি pk
1 থেকে 2 থেকে পরিবর্তিত হয় এবং ইতিমধ্যে যেখানে একটি সারি রয়েছে pk
= ২। এসকিউএল সার্ভার স্টোরেজ ইঞ্জিনের প্রয়োজন হয় যে একক বিবৃতিতে এমনকি প্রসেসিংয়ের প্রতিটি পর্যায়ে অনন্য সূচকগুলি অনন্য থাকতে পারে । এই সমস্যাটি স্প্লিট, বাছাই এবং সঙ্কুচিত হয়ে সমাধান করা হয়েছে।
বিভক্ত করা
প্রথম পদক্ষেপটি প্রতিটি আপডেটের বিবৃতিটি একটি সন্নিবেশের পরে মুছে ফেলার মধ্যে বিভক্ত করা হয়:
DELETE dbo.Banana WHERE pk = 1;
INSERT dbo.Banana (pk, c1, c2) VALUES (2, 'A', 'W');
DELETE dbo.Banana WHERE pk = 2;
INSERT dbo.Banana (pk, c1, c2) VALUES (3, 'B', 'X');
DELETE dbo.Banana WHERE pk = 3;
INSERT dbo.Banana (pk, c1, c2) VALUES (4, 'C', 'Y');
DELETE dbo.Banana WHERE pk = 4;
INSERT dbo.Banana (pk, c1, c2) VALUES (5, 'D', 'Z');
স্প্লিট অপারেটর স্ট্রিমটিতে একটি অ্যাকশন কোড কলাম যুক্ত করে (এখানে Act1007 লেবেলযুক্ত):
অ্যাকশন কোডটি আপডেটের জন্য 1, একটি মুছার জন্য 3 এবং একটি সন্নিবেশের জন্য 4 হয়।
সাজান
উপরের বিভক্ত বিবৃতিগুলি এখনও একটি মিথ্যা ক্ষণস্থায়ী অনন্য কী লঙ্ঘন তৈরি করবে, সুতরাং পরবর্তী পদক্ষেপটি অনন্য সূচকের কীগুলি দ্বারা আপডেট হওয়া ( pk
এই ক্ষেত্রে) কীগুলি দ্বারা বিবৃতিগুলি সাজান , তারপরে ক্রিয়া কোড দ্বারা। এই উদাহরণস্বরূপ, এর সহজ অর্থ হ'ল একই কীতে মুছে ফেলা (3) সন্নিবেশ (4) এর আগে অর্ডার করা হয়। ফলাফলটি হ'ল:
-- Sort (pk, action)
DELETE dbo.Banana WHERE pk = 1;
DELETE dbo.Banana WHERE pk = 2;
INSERT dbo.Banana (pk, c1, c2) VALUES (2, 'A', 'W');
DELETE dbo.Banana WHERE pk = 3;
INSERT dbo.Banana (pk, c1, c2) VALUES (3, 'B', 'X');
DELETE dbo.Banana WHERE pk = 4;
INSERT dbo.Banana (pk, c1, c2) VALUES (4, 'C', 'Y');
INSERT dbo.Banana (pk, c1, c2) VALUES (5, 'D', 'Z');
পতন
পূর্ববর্তী পর্যায়ে সমস্ত ক্ষেত্রে মিথ্যা স্বতন্ত্রতা লঙ্ঘন এড়ানো গ্যারান্টি যথেষ্ট। একটি অপ্টিমাইজেশান হিসাবে, সঙ্কুচিত সম্মিলন সংলগ্ন মোছাগুলিকে এবং টিপে একই কী মূল্যের ওপর একটি আপডেট মধ্যে:
-- Collapse (pk)
DELETE dbo.Banana WHERE pk = 1;
UPDATE dbo.Banana SET c1 = 'A', c2 = 'W' WHERE pk = 2;
UPDATE dbo.Banana SET c1 = 'B', c2 = 'X' WHERE pk = 3;
UPDATE dbo.Banana SET c1 = 'C', c2 = 'Y' WHERE pk = 4;
INSERT dbo.Banana (pk, c1, c2) VALUES (5, 'D', 'Z');
pk
2, 3 এবং 4 এর মানগুলির জন্য মুছুন / সন্নিবেশ করা জোড়গুলিকে একটি আপডেটে একত্রিত করা হয়েছে, pk
= 1 এ একক মুছুন এবং pk
= 5 এর জন্য একটি সন্নিবেশ রেখে ।
সঙ্কুচিত অপারেটরটি মূল কলামগুলির দ্বারা সারিগুলিকে গোষ্ঠীভুক্ত করে এবং পতনের ফলাফলটি প্রতিফলিত করতে ক্রিয়া কোড আপডেট করে:
ক্লাস্টারড ইনডেক্স আপডেট
এই অপারেটরটি আপডেট হিসাবে লেবেলযুক্ত তবে এটি সন্নিবেশ, আপডেট এবং মুছতে সক্ষম। প্রতি সারি ক্লাস্টারড ইনডেক্স আপডেট দ্বারা কোন পদক্ষেপ নেওয়া হয় তা সেই সারির ক্রিয়া কোডের মান দ্বারা নির্ধারিত হয়। এই অপারেশনের মোডটি প্রতিফলিত করতে অপারেটরের একটি ক্রিয়া সম্পত্তি রয়েছে:
সারি পরিবর্তন কাউন্টার
নোট করুন যে উপরের তিনটি আপডেট রক্ষণাবেক্ষণের জন্য অনন্য সূচকের কী (গুলি) পরিবর্তন করে না । ফলস্বরূপ, আমরা সূচীর মূল কলামগুলিতে আপডেটগুলি নন-কী কলামগুলি c1
এবং ( এবং c2
), পাশাপাশি একটি মুছুন এবং একটি সন্নিবেশকে আপডেট করেছি । কোনও মুছুন বা সন্নিবেশ করাই মিথ্যা অনন্য-কী লঙ্ঘনের কারণ হতে পারে না।
একটি সন্নিবেশ বা একটি মোছা সারির প্রতিটি একক কলামকে প্রভাবিত করে, সুতরাং প্রতিটি কলামের সাথে সম্পর্কিত পরিসংখ্যানগুলিতে তাদের সংশোধন কাউন্টারগুলি বাড়ানো হবে। আপডেট (গুলি) এর জন্য, শীর্ষস্থানীয় কলাম হিসাবে কেবল আপডেট হওয়া কোনও কলামের পরিসংখ্যানগুলির পরিবর্তনের কাউন্টারগুলি বাড়ানো হয়েছে (মানটি অপরিবর্তিত থাকলেও)।
পরিসংখ্যান সারি পরিমার্জন কাউন্টারে অতএব 2 পরিবর্তনগুলি দেখতে pk
, এবং 5 জন্য c1
এবং c2
:
-- Collapse (pk)
DELETE dbo.Banana WHERE pk = 1; -- All columns modified
UPDATE dbo.Banana SET c1 = 'A', c2 = 'W' WHERE pk = 2; -- c1 and c2 modified
UPDATE dbo.Banana SET c1 = 'B', c2 = 'X' WHERE pk = 3; -- c1 and c2 modified
UPDATE dbo.Banana SET c1 = 'C', c2 = 'Y' WHERE pk = 4; -- c1 and c2 modified
INSERT dbo.Banana (pk, c1, c2) VALUES (5, 'D', 'Z'); -- All columns modified
দ্রষ্টব্য: কেবলমাত্র বেস অবজেক্টে প্রয়োগ করা পরিবর্তনগুলি (হিপ বা ক্লাস্টার ইনডেক্স) পরিসংখ্যান সারি পরিবর্তন কাউন্টারগুলিকে প্রভাবিত করে। নন-ক্লাস্টারড ইনডেক্সগুলি গৌণ কাঠামো, বেস অবজেক্টে ইতিমধ্যে করা পরিবর্তনগুলি প্রতিফলিত করে। তারা পরিসংখ্যান সারি পরিবর্তন কাউন্টারগুলিকে মোটেই প্রভাবিত করে না।
যদি কোনও অবজেক্টের একাধিক অনন্য সূচক থাকে তবে প্রতিটিটিতে আপডেটগুলি সাজানোর জন্য একটি পৃথক স্প্লিট, বাছাই করা, সঙ্কুচিত সংমিশ্রণ ব্যবহৃত হয়। এসকিউএল সার্ভার এই কেসটি অবিচ্ছিন্ন সূচকের জন্য একটি ইজিার টেবিল স্পুলে সংরক্ষণ করে তারপরে প্রতিটি অনন্য সূচকের জন্য সেটটি পুনরায় প্লে করে (যার সূচি কী + অ্যাকশন কোড অনুসারে নিজস্ব সাজাতে হবে এবং সঙ্কুচিত হবে) ing
পরিসংখ্যান আপডেটের উপর প্রভাব
স্বয়ংক্রিয় পরিসংখ্যান আপডেট (সক্ষম থাকলে) ঘটে যখন কোয়েরি অপটিমাইজার পরিসংখ্যানগত তথ্য ও বিজ্ঞপ্তিগুলিকে বিদ্যমান পরিসংখ্যান দরকার তারিখ সীমার বাইরে (ক স্কিমা পরিবর্তনের কারণে অথবা অবৈধ)। পরিসংখ্যানগুলি পুরানো বিবেচনা করা হয় যখন রেকর্ডকৃত সংখ্যার সংখ্যা একটি প্রান্তিক ছাড়িয়ে যায়।
প্রত্যাশিত তুলনায় রেকর্ড করা হচ্ছে বিভিন্ন সারি পরিবর্তনগুলিতে বিভক্ত / সাজান / সঙ্কুচিত বিন্যাসের ফলাফল । এর পরিবর্তে এর অর্থ হ'ল কোনও পরিসংখ্যান আপডেটের তাড়াতাড়ি বা পরে ট্রিগার করা হতে পারে অন্যথায় এটি হতে পারে।
উপরের উদাহরণে, মূল কলামের জন্য সারি পরিবর্তনগুলি 4 টির পরিবর্তে (নেট পরিবর্তন) বৃদ্ধি করে (প্রতিটি টেবিলের সারিটির জন্য একটি প্রভাবিত), বা 5 (সঙ্কুচিত দ্বারা উত্পাদিত প্রতিটি মুছ / আপডেট / সন্নিবেশের জন্য একটি) one
এছাড়াও, মূল-ক্যোয়ারী দ্বারা যৌক্তিকরূপে পরিবর্তন হয়নি এমন নন-কী কলামগুলি সারি পরিবর্তনগুলি জমা করে, যা টেবিলের সারিগুলি দ্বিগুণ হিসাবে আপডেট করা হতে পারে (প্রতিটি মুছার জন্য একটি এবং প্রতিটি সন্নিবেশনের জন্য একটি)।
রেকর্ডকৃত পরিবর্তনগুলির সংখ্যা পুরানো এবং নতুন কী কলাম মানগুলির মধ্যে ওভারল্যাপের ডিগ্রির উপর নির্ভর করে (এবং সেই ডিগ্রি যাতে পৃথক মুছে ফেলা এবং সন্নিবেশ করানো যেতে পারে)। প্রতিটি মৃত্যুদন্ডের মধ্যে টেবিলটি পুনরায় সেট করা, নিম্নলিখিত প্রশ্নগুলি বিভিন্ন ওভারল্যাপ সহ সারি পরিবর্তন কাউন্টারগুলিতে প্রভাব প্রদর্শন করে:
UPDATE dbo.Banana SET pk = pk + 0; -- Full overlap
UPDATE dbo.Banana SET pk = pk + 1;
UPDATE dbo.Banana SET pk = pk + 2;
UPDATE dbo.Banana SET pk = pk + 3;
UPDATE dbo.Banana SET pk = pk + 4; -- No overlap