এটি অন্য কোয়েরি অপটিমাইজার কনড্রাম।
হয়তো আমি কোয়েরি অপ্টিমাইজারগুলিকে মাত্রাতিরিক্ত অনুমান করছি, বা সম্ভবত আমি কিছু অনুপস্থিত করছি - তাই আমি এটি এখানে রেখে দিচ্ছি।
আমার একটা সাধারণ টেবিল আছে
CREATE TABLE [dbo].[MyEntities](
[Id] [uniqueidentifier] NOT NULL,
[Number] [int] NOT NULL,
CONSTRAINT [PK_dbo.MyEntities] PRIMARY KEY CLUSTERED ([Id])
)
CREATE NONCLUSTERED INDEX [IX_Number] ON [dbo].[MyEntities] ([Number])
সেখানে একটি সূচক এবং কয়েক হাজার সারি সহ Number
0, 1 এবং 2 মানগুলিতে সমানভাবে বিতরণ করা হচ্ছে।
এখন এই ক্যোয়ারী:
SELECT * FROM
(SELECT
[Extent1].[Number] AS [Number],
CASE
WHEN (0 = [Extent1].[Number]) THEN 'one'
WHEN (1 = [Extent1].[Number]) THEN 'two'
WHEN (2 = [Extent1].[Number]) THEN 'three'
ELSE '?'
END AS [Name]
FROM [dbo].[MyEntities] AS [Extent1]
) P
WHERE P.Number = 0;
একটি সূচক IX_Number
যেমন আশা করবে তেমন চেষ্টা করে ।
যদি ক্লজটি থাকে
WHERE P.Name = 'one';
তবে এটি একটি স্ক্যান হয়ে যায়।
কেস-ক্লজটি স্পষ্টতই একটি হস্তক্ষেপ, সুতরাং তাত্ত্বিকভাবে দ্বিতীয় ক্যোয়ারী থেকে প্রথম ক্যোয়ারী পরিকল্পনাটি কর্তন করা একটি অপ্টিমাইজেশনের পক্ষে হওয়া উচিত।
এটি নিখুঁত একাডেমিকও নয়: ক্যোয়ারী এনাম মানগুলিকে তাদের নিজ নিজ বন্ধুত্বপূর্ণ নামগুলিতে অনুবাদ করে অনুপ্রাণিত হয়।
আমি এমন কারও কাছ থেকে শুনতে চাই যা জানে যে ক্যোয়ারী অপ্টিমাইজারগুলি (এবং বিশেষত এসকিউএল সার্ভারের মধ্যে একটি) থেকে কী আশা করা যায়: আমি কি খুব বেশি আশা করি?
আমি জিজ্ঞাসা করছিলাম যে এর আগে আমার ক্ষেত্রে কেইসের কিছুটা সামান্য প্রকরণ হঠাৎ করে একটি অপ্টিমাইজেশান প্রকাশিত হবে।
আমি এসকিএল সার্ভার 2016 বিকাশকারী সংস্করণ ব্যবহার করছি।