यह एक और क्वेरी ऑप्टिमाइज़र है।
हो सकता है कि मैं सिर्फ क्वेरी ऑप्टिमाइज़र का अनुमान लगा रहा हूं, या शायद मुझे कुछ याद आ रहा है - इसलिए मैं इसे बाहर रख रहा हूं।
मेरे पास एक साधारण टेबल है
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';
हालाँकि, यह एक स्कैन बन जाता है।
केस-क्लॉज स्पष्ट रूप से एक आक्षेप है, इसलिए सिद्धांत रूप में एक अनुकूलन दूसरी क्वेरी से पहली क्वेरी योजना को निकालना संभव हो सकता है।
यह विशुद्ध रूप से अकादमिक नहीं है: क्वेरी अपने संबंधित अनुकूल नामों में एनम मूल्यों का अनुवाद करने से प्रेरित है।
मैं किसी ऐसे व्यक्ति से सुनना चाहता हूं जो यह जानता है कि क्वेरी ऑप्टिमाइज़र (और विशेष रूप से एसक्यूएल सर्वर में एक से) क्या उम्मीद की जा सकती है: क्या मैं बस बहुत अधिक उम्मीद कर रहा हूं?
मैं पूछ रहा हूं क्योंकि मेरे पास ऐसे मामले थे जहां एक क्वेरी के कुछ मामूली बदलाव अचानक एक अनुकूलन बन जाएंगे।
मैं Sql Server 2016 डेवलपर संस्करण का उपयोग कर रहा हूं।