ORDER BYমধ্যে দফা SELECTবিবৃতি অপ্রয়োজনীয়।
এটি অনর্থক কারণ যে সারিগুলি সন্নিবেশ করা হবে, যদি তাদের বাছাই করা দরকার হয় তবে যেভাবেই তা বাছাই করা হয়।
আসুন একটি পরীক্ষা কেস তৈরি করুন।
CREATE TABLE #Test (
id INTEGER NOT NULL
);
CREATE UNIQUE CLUSTERED INDEX CL_Test_ID ON #Test (id);
CREATE TABLE #Sequence (
number INTEGER NOT NULL
);
INSERT INTO #Sequence
SELECT number FROM master..spt_values WHERE name IS NULL;
আসুন আসল ক্যোয়ারী পরিকল্পনাগুলির পাঠ্য প্রদর্শন সক্ষম করুন, যাতে আমরা দেখতে পারি যে কোয়েরি প্রসেসর দ্বারা কোন কাজ সম্পাদিত হয়।
SET STATISTICS PROFILE ON;
GO
এখন, INSERTকোনও ORDER BYধারা ছাড়াই টেবিলের 2K সারিগুলিতে আসুন ।
INSERT INTO #Test
SELECT number
FROM #Sequence
এই ক্যোয়ারির জন্য প্রকৃত বাস্তবায়ন পরিকল্পনাটি নিম্নলিখিত।
INSERT INTO #Test SELECT number FROM #Sequence
|--Clustered Index Insert(OBJECT:([tempdb].[dbo].[#Test]), SET:([tempdb].[dbo].[#Test].[id] = [tempdb].[dbo].[#Sequence].[number]))
|--Top(ROWCOUNT est 0)
|--Sort(ORDER BY:([tempdb].[dbo].[#Sequence].[number] ASC))
|--Table Scan(OBJECT:([tempdb].[dbo].[#Sequence]))
আপনি দেখতে পাচ্ছেন, আসল INSERT হওয়ার আগে একটি সোর্ট অপারেটর রয়েছে।
এখন, টেবিল ও পরিষ্কার দিন INSERTটেবিল মধ্যে 2k সারি ORDER BYদফা।
TRUNCATE TABLE #Test;
GO
INSERT INTO #Test
SELECT number
FROM #Sequence
ORDER BY number
এই ক্যোয়ারির জন্য প্রকৃত বাস্তবায়ন পরিকল্পনাটি নিম্নলিখিত।
INSERT INTO #Test SELECT number FROM #Sequence ORDER BY number
|--Clustered Index Insert(OBJECT:([tempdb].[dbo].[#Test]), SET:([tempdb].[dbo].[#Test].[id] = [tempdb].[dbo].[#Sequence].[number]))
|--Top(ROWCOUNT est 0)
|--Sort(ORDER BY:([tempdb].[dbo].[#Sequence].[number] ASC))
|--Table Scan(OBJECT:([tempdb].[dbo].[#Sequence]))
নোট করুন যে এটি একই কার্যকরকরণ পরিকল্পনা যা দফা INSERTব্যতীত বিবৃতিতে ব্যবহার করা হয়েছিল ORDER BY।
এখন, Sortঅপারেশনটি সবসময় প্রয়োজন হয় না, যেমন মার্ক স্মিথ অন্য উত্তরে দেখিয়েছেন (সন্নিবেশ করার জন্য সারিগুলির সংখ্যা কম থাকলে), তবে সেক্ষেত্রে ORDER BYধারাটি অপ্রয়োজনীয়, কারণ এমনকি স্পষ্টতই ORDER BY, কোনও Sortঅপারেশন তৈরি করা হয়নি ক্যোয়ারী প্রসেসর দ্বারা।
আপনি INSERTএকটি ক্লাস্টার ইনডেক্স সহ একটি টেবিলের মধ্যে একটি বিবৃতি অপেক্ষাকৃত কম-লগড ব্যবহার করে অনুকূল করতে পারেন INSERT, তবে এটি এই প্রশ্নের সুযোগের বাইরে।
আপডেট করা হয়েছে ২০১১-১১-০২: মার্ক স্মিথ যেমন দেখিয়েছেন , INSERTক্লাস্টারড ইনডেক্সের একটি টেবিলের মধ্যে সবসময় সাজানোর দরকার পড়তে পারে না - ORDER BYযদিও এই ক্ষেত্রে দফাটিও অপ্রয়োজনীয়।