এই কোয়েরিটি দেখুন। এটি বেশ সহজ (টেবিল এবং সূচী সংজ্ঞাগুলির জন্য পোস্টের শেষে এবং একটি তদন্তের স্ক্রিপ্ট দেখুন):
SELECT MAX(Revision)
FROM dbo.TheOneders
WHERE Id = 1 AND 1 = (SELECT 1);
দ্রষ্টব্য: "এবং 1 = (নির্বাচন 1) এই ক্যোয়ারীটিকে স্বয়ংক্রিয়ভাবে প্যারামিটারাইজড করা থেকে বিরত রাখার জন্য, যা আমার মনে হয়েছিল যে বিষয়টি সমস্যাটিকে বিভ্রান্ত করছে - এটি আসলে সেই ধারাটির সাথে বা ছাড়া একই পরিকল্পনা পেয়েছে
এবং এখানে পরিকল্পনাটি রয়েছে ( পরিকল্পনার লিঙ্কটি পেস্ট করুন) :
যেহেতু সেখানে একটি "শীর্ষ 1" রয়েছে তাই আমি স্ট্রিমের সামগ্রিক অপারেটরটি দেখে অবাক হয়েছি। এটি আমার পক্ষে প্রয়োজনীয় বলে মনে হচ্ছে না, যেহেতু কেবলমাত্র এক সারি হওয়ার নিশ্চয়তা রয়েছে।
এই তত্ত্বটি পরীক্ষা করার জন্য, আমি এই যৌক্তিক সমতুল্য ক্যোয়ারীটি চেষ্টা করেছিলাম:
SELECT MAX(Revision)
FROM dbo.TheOneders
WHERE Id = 1
GROUP BY Id;
এখানে তার জন্য পরিকল্পনাটি রয়েছে ( পরিকল্পনার লিঙ্কটি পেস্ট করুন ):
নিশ্চিতভাবেই, পরিকল্পনা অনুসারে গোষ্ঠীটি স্ট্রিম সামগ্রিক অপারেটর ছাড়াই পেতে সক্ষম হয়।
লক্ষ্য করুন যে উভয় প্রশ্ন সূচকের শেষ থেকে "পিছনের দিকে" পড়ে এবং সর্বোচ্চ সংশোধন পেতে একটি "শীর্ষ 1" করুন do
আমি এখানে কি মিস করছি? স্ট্রিম সামগ্রিক আসলে প্রথম ক্যোয়ারীতে কাজ করছে, বা এটি নির্মূল করতে সক্ষম হওয়া উচিত (এবং এটি কেবলমাত্র অপটিমাইজারের সীমাবদ্ধতা নয়)?
যাইহোক, আমি বুঝতে পারি এটি একটি অবিশ্বাস্যভাবে ব্যবহারিক সমস্যা নয় (উভয় কোয়েরিজের রিপোর্ট 0 মাইলের সিপিইউ এবং অতিবাহিত সময়), আমি এখানে অভ্যন্তরীণ / আচরণের জন্য এখানে প্রদর্শিত হতে আগ্রহী।
উপরোক্ত দুটি ক্যুরিয় চালানোর আগে আমি যে সেটআপ কোডটি দৌড়েছি তা এখানে:
DROP TABLE IF EXISTS dbo.TheOneders;
GO
CREATE TABLE dbo.TheOneders
(
Id INT NOT NULL,
Revision SMALLINT NOT NULL,
Something NVARCHAR(23),
CONSTRAINT PK_TheOneders PRIMARY KEY NONCLUSTERED (Id, Revision)
);
GO
INSERT INTO dbo.TheOneders
(Id, Revision, Something)
SELECT DISTINCT TOP 1000
1, m.message_id, 'Do...'
FROM sys.messages m
ORDER BY m.message_id
OPTION (MAXDOP 1);
INSERT INTO dbo.TheOneders
(Id, Revision, Something)
SELECT DISTINCT TOP 100
2, m.message_id, 'Do that thing you do...'
FROM sys.messages m
ORDER BY m.message_id
OPTION (MAXDOP 1);
GO