বিভিন্ন সিনট্যাক্স ব্যবহার করে ক্যোয়ারী প্রকাশ করা কখনও কখনও অপ্টিমাইজারের কাছে একটি ক্লাস্টারবিহীন সূচক ব্যবহার করার আপনার ইচ্ছাটি যোগাযোগ করতে সহায়তা করে। আপনার নীচের ফর্মটি সন্ধান করা উচিত যা আপনার পছন্দসই পরিকল্পনাটি দেয়:
SELECT
[ID],
[DeviceID],
[IsPUp],
[IsWebUp],
[IsPingUp],
[DateEntered]
FROM [dbo].[Heartbeats]
WHERE
[ID] IN
(
-- Keys
SELECT TOP (1000)
[ID]
FROM [dbo].[Heartbeats]
WHERE
[DateEntered] >= CONVERT(datetime, '2011-08-30', 121)
AND [DateEntered] < CONVERT(datetime, '2011-08-31', 121)
);
নন-ক্লাস্টারড সূচককে ইঙ্গিত সহ বাধ্য করা হলে উত্পাদিত পরিকল্পনার সাথে সেই পরিকল্পনার তুলনা করুন:
SELECT TOP (1000)
*
FROM [dbo].[Heartbeats] WITH (INDEX(CommonQueryIndex))
WHERE
[DateEntered] BETWEEN '2011-08-30' and '2011-08-31';
পরিকল্পনাগুলি মূলত একই রকম (কী লুকআপ ক্লাস্টারড ইনডেক্সে সন্ধান ছাড়া আর কিছুই নয়)। উভয় পরিকল্পনার ফর্মগুলি কেবল ক্লাস্টারযুক্ত সূচকের জন্য একবার অনুসন্ধান এবং ক্লাস্টারড ইনডেক্সে সর্বাধিক 1000 লুকআপের কাজ সম্পাদন করবে।
শীর্ষস্থানীয় অপারেটরের অবস্থানের মধ্যে গুরুত্বপূর্ণ পার্থক্য। দুটি সেকেন্ডের মধ্যে অবস্থিত, শীর্ষটি ক্লাস্টারড ইনডেক্সের যৌক্তিক-সমতুল্য স্ক্যান দিয়ে দুটি সন্ধানকারী ক্রিয়াকলাপগুলি প্রতিস্থাপন থেকে অপ্টিমাইজারটিকে বাধা দেয়। অপ্টিমাইজার সমতুল্য আপেক্ষিক ক্রিয়াকলাপের সাথে যৌক্তিক পরিকল্পনার অংশগুলি প্রতিস্থাপন করে কাজ করে। শীর্ষ কোনও আপেক্ষিক অপারেটর নয়, সুতরাং পুনর্লিখনটি ক্লাস্টারড ইনডেক্স স্ক্যানে রূপান্তরকে বাধা দেয়। যদি অপ্টিমাইজার শীর্ষ অপারেটরটিকে পুনরায় স্থাপন করতে সক্ষম হয় তবে ব্যয় নির্ধারণের কাজটি করার কারণে এটি অনুসন্ধান + অনুসন্ধানের চেয়েও স্ক্যানটিকে পছন্দ করবে।
স্ক্যান এবং সিক্সের ব্যয়
খুব উচ্চ স্তরে, স্ক্যানগুলি এবং সিক্সের জন্য অপ্টিমাইজারের ব্যয় মডেলটি বেশ সহজ: এটি অনুমান করে যে 320 এলোমেলো সিক্সের স্ক্যানের 1350 পৃষ্ঠা পড়ার মতোই ব্যয় হয় । এটি সম্ভবত কোনও নির্দিষ্ট আধুনিক আই / ও সিস্টেমের হার্ডওয়্যার ক্ষমতার সাথে সামান্য সাদৃশ্য রাখে তবে এটি একটি ব্যবহারিক মডেলের পাশাপাশি যুক্তিসঙ্গতভাবে কাজ করে।
মডেলটি বেশ কয়েকটি সরলকরণ অনুমানও তৈরি করে, একটি প্রধান যা প্রতিটি ক্যোয়ারী ইতিমধ্যে ক্যাশে থাকা কোনও ডেটা বা সূচী পৃষ্ঠাগুলি দিয়ে শুরু করার জন্য অনুমান করা হয়। প্রকৃতপক্ষে হ'ল প্রতি আই / ও-র ফলে শারীরিক আই / ও হবে - যদিও বাস্তবে এটি খুব কমই ঘটে। এমনকি একটি শীতল ক্যাশে সহ, প্রাক-আনয়ন এবং পঠন-এর অর্থ হ'ল ক্যোয়ারী প্রসেসরের প্রয়োজনীয় সময়ের সাথে প্রয়োজনীয় পৃষ্ঠাগুলি মেমরির মধ্যে থাকার সম্ভাবনা বেশি।
আরেকটি বিবেচনাটি হ'ল মেমোরিতে নেই এমন একটি সারিটির প্রথম অনুরোধের ফলে পুরো পৃষ্ঠাটি ডিস্ক থেকে আনা হবে। একই পৃষ্ঠায় সারিগুলির জন্য পরবর্তী অনুরোধগুলি সম্ভবত শারীরিক আই / ও বহন করবে না। ব্যয়বহুল মডেলটিতে এ জাতীয় প্রভাবগুলির কিছু অ্যাকাউন্ট নেওয়ার পক্ষে যুক্তি রয়েছে তবে এটি সঠিক নয়।
এই সমস্ত জিনিস (এবং আরও অনেকগুলি) অর্থ অপ্টিমাইজারটি সম্ভবত যা করা উচিত তার চেয়ে আগে কোনও স্ক্যানে স্যুইচ করে। এলোমেলো I / O কেবলমাত্র 'সিক্যুয়াল' I / O এর চেয়ে 'অনেক বেশি ব্যয়বহুল' যদি কোনও শারীরিক ক্রিয়াকলাপের ফলাফল হয় - মেমরিতে পৃষ্ঠাগুলি অ্যাক্সেস করা খুব দ্রুত হয়। এমনকি যেখানে শারীরিক পাঠের প্রয়োজনীয়তা রয়েছে সেখানে কোনও স্ক্যানের ফলে টুকরো টুকরো হওয়ার কারণে সিক্যুয়ালিটি রিডের ফলস্বরূপ না ঘটতে পারে এবং প্যাটার্নটি মূলত সিক্যুয়েন্সিয়াল হতে পারে এমন সন্ধানটি সংঘবদ্ধ হতে পারে। এতে যোগ করুন যে আধুনিক আই / ও সিস্টেমগুলির পরিবর্তনশীল পারফরম্যান্সের বৈশিষ্ট্য (বিশেষত সলিড-স্টেট) এবং পুরো জিনিসটি খুব নড়বড়ে লাগতে শুরু করে।
সারি লক্ষ্য
কোনও পরিকল্পনায় শীর্ষস্থানীয় অপারেটরের উপস্থিতি ব্যয়বহুল পদ্ধতির পরিবর্তন করে। অপটিমাইজারটি যথেষ্ট স্মার্ট যে একটি স্ক্যান ব্যবহার করে 1000 টি সারি সন্ধান করা সম্ভবত পুরো ক্লাস্টারড সূচকটি স্ক্যান করার দরকার পড়বে না - এটি 1000 সারি পাওয়া মাত্রই বন্ধ হয়ে যেতে পারে। এটি শীর্ষ অপারেটরে 1000 সারিগুলির একটি 'সারি লক্ষ্য' নির্ধারণ করে এবং সেখান থেকে ফিরে কাজ করার জন্য পরিসংখ্যান সম্পর্কিত তথ্য ব্যবহার করে এটি সারি উত্স থেকে (সেক্ষেত্রে একটি স্ক্যান) কত সারি প্রয়োজন বলে প্রত্যাশা করে to আমি এখানে এই গণনার বিশদ সম্পর্কে লিখেছি ।
এই উত্তরের চিত্রগুলি এসকিউএল সেন্ট্রি প্ল্যান এক্সপ্লোরার ব্যবহার করে তৈরি করা হয়েছিল ।