এবং ফাংশন সম্পর্কে কিছুই। আসল পরিকল্পনায় ফাংশন সম্পর্কিত তথ্য কেন অনুপস্থিত?
এটি কার্য সম্পাদনের কারণে ডিজাইনের মাধ্যমে।
কার্যাবলী যেগুলিতে BEGIN
এবং END
সংজ্ঞা প্রতিটি ইনপুট সারি জন্য একটি নতুন টি-এসকিউএল স্ট্যাক ফ্রেম তৈরি করুন। অন্যভাবে রাখুন, প্রতিটি ইনপুট সারির জন্য ফাংশন বডিটি পৃথকভাবে কার্যকর করা হয় । এই একক সত্যটি টি-এসকিউএল স্কেলার এবং মাল্টি-স্টেটমেন্ট ফাংশনগুলির সাথে সম্পর্কিত বেশিরভাগ কার্যকারিতা সমস্যাগুলি ব্যাখ্যা করে (নোট করুন যে ইন-লাইন টেবিলের মূল্যবান ফাংশনগুলি BEGIN...END
সিনট্যাক্স ব্যবহার করে না )।
আপনার প্রশ্নের প্রসঙ্গে, এর ফলে SHOWPLAN
প্রতিটি সারির পূর্ণ ফলাফল হয়। এক্সএমএল পরিকল্পনার আউটপুট উত্পাদন করা বেশ ভার্জোজ এবং ব্যয়বহুল, সুতরাং প্রতিটি সারির জন্য সম্পূর্ণ আউটপুট উত্পাদন করা সাধারণ দিক থেকে একটি খারাপ ধারণা হবে।
উদাহরণ
অ্যাডভেঞ্চার ওয়ার্কস নমুনা ডাটাবেসে তৈরি নীচের টি-এসকিউএল স্কেলার ফাংশনটি বিবেচনা করুন , যা কোনও আইডি প্রদত্ত কোনও পণ্যের নাম ফিরিয়ে দেয়:
CREATE FUNCTION dbo.DumbNameLookup
(
@ProductID integer
)
RETURNS dbo.Name
AS
BEGIN
RETURN
(
SELECT
p.Name
FROM Production.Product AS p
WHERE
p.ProductID = @ProductID
);
END;
প্রাক-বাস্তবায়ন পরিকল্পনা
একটি প্রাক-বাস্তবায়ন পরিকল্পনা (এসএসএমএসে আনুমানিক পরিকল্পনা) পিতামাতার বিবৃতি এবং নেস্টেড ফাংশন কলের জন্য পরিকল্পনার তথ্য দেখায়:
-- Pre-execution plan shows main query and nested function call
SET SHOWPLAN_XML ON;
GO
SELECT dbo.DumbNameLookup(1);
GO
SET SHOWPLAN_XML OFF;
এসএসএমএস আউটপুট:
এসকিউএল সেন্ট্রি প্ল্যান এক্সপ্লোরারে দেখা একই এক্সএমএল কলগুলির নেস্টেড প্রকৃতিটি আরও স্পষ্টভাবে দেখায়:
মৃত্যুদন্ড কার্যকর করার পরে আউটপুট
এসএসএমএস কেবল কার্যকর জিজ্ঞাসার জন্য বিশদটি দেখায় যখন কার্যকর-পরবর্তী পরিকল্পনা পরিকল্পনার জন্য অনুরোধ করা হয়:
-- Post-execution plan shows main query only
SET STATISTICS XML ON;
SELECT dbo.DumbNameLookup(1);
SET STATISTICS XML OFF;
অন্যথায় করার পারফরম্যান্স প্রভাবটি এসকিউএল সার্ভার প্রোফাইলারে শোপ্লান এক্সএমএল পরিসংখ্যান প্রোফাইল ইভেন্ট ক্লাস ব্যবহার করে দেখানো যেতে পারে যা এমন একটি ক্যোয়ারী যা ফাংশনটিকে একাধিকবার কল করে (প্রতি ইনপুট সারিতে একবার):
SELECT TOP (5)
p.ProductID,
dbo.DumbNameLookup(p.ProductID)
FROM Production.Product AS p;
প্রোফাইলার আউটপুট:
ফাংশন মৃত্যুদন্ড কার্যকর করার জন্য পাঁচটি পৃথক-কার্যকর করার পরিকল্পনা রয়েছে এবং প্যারেন্ট ক্যোয়ারির জন্য একটি রয়েছে। পাঁচটি ফাংশন পরিকল্পনার প্রোফাইলার নীচে অংশে এটির মতো দেখাচ্ছে:
প্যারেন্ট ক্যোয়ারী পরিকল্পনাটি হ'ল:
ক্লজটি ছাড়াই ক্যোয়ারি কার্যকর করা TOP (5)
ফলাফল সারণীতে 504 টি সারিগুলির প্রত্যেকটির জন্য একটি সম্পূর্ণ সম্পাদন পরিকল্পনার ফলাফল দেয়। আপনি সম্ভবত দেখতে পাচ্ছেন যে এটি কীভাবে বড় টেবিলগুলির সাহায্যে হাতছাড়া হয়ে যায়।
ট্রিগারগুলির পরিস্থিতি বিপরীত। এগুলি প্রাক-সম্পাদন পরিকল্পনার কোনও তথ্য দেখায় না, তবে মৃত্যুদণ্ড কার্যকর করার পরে একটি পরিকল্পনা অন্তর্ভুক্ত করে। এটি ট্রিগারগুলির সেট-ভিত্তিক প্রকৃতি প্রতিফলিত করে; প্রত্যেকে একবারে প্রতি সারির পরিবর্তে ক্ষতিগ্রস্ত সমস্ত সারিগুলির জন্য একবার নিক্ষেপ করা হয়।