কেন কোনও পূর্ণ স্ক্যান নেই (এসকিউএল ২০০৮ আর ২ এবং ২০১২ এ)?
পরীক্ষার ডেটা:
DROP TABLE dbo.TestTable
GO
CREATE TABLE dbo.TestTable
(
TestTableID INT IDENTITY PRIMARY KEY,
VeryRandomText VarChar(50),
VeryRandomText2 VarChar(50)
)
Go
Set NoCount ON
Declare @i int
Set @i = 0
While @i < 10000
Begin
Insert Into dbo.TestTable(VeryRandomText, VeryRandomText2)
Values(Cast(Rand()*10000000 as VarChar(50)), Cast(Rand()*10000000 as VarChar(50)));
Set @i = @i + 1;
End
Go
CREATE Index IX_VeryRandomText On dbo.TestTable
(
VeryRandomText
)
Go
কোয়েরি কার্যকর করার সময়:
Select * From dbo.TestTable Where VeryRandomText = N'111' -- bad
সতর্কতা পান (আশানুরূপ হিসাবে, কারণ এনসিআর ডেটা ভের্চর কলামের সাথে তুলনা করা):
<PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT_IMPLICIT(nvarchar(50),[DemoDatabase].[dbo].[TestTable].[VeryRandomText],0)" />
তবে আমি বাস্তবায়ন পরিকল্পনাটি দেখতে পাচ্ছি এবং আমি দেখতে পাচ্ছি যে এটি আমার প্রত্যাশা মতো পূর্ণ স্ক্যান ব্যবহার করছে না, পরিবর্তে সূচক অনুসন্ধান করবে seek
অবশ্যই, এটি এক ধরণের ভাল, কারণ এই বিশেষ ক্ষেত্রে কার্যকর স্ক্যান হওয়ার চেয়ে দ্রুত কার্যকর করা কার্যকর হয়।
তবে আমি বুঝতে পারি না এসকিউএল সার্ভার কীভাবে এই পরিকল্পনাটি করার সিদ্ধান্ত নিয়েছে।
এছাড়াও- যদি সার্ভার স্তরটি সার্ভার স্তর এবং এসকিউএল সার্ভার কোলিশান ডাটাবেস স্তরে উইন্ডোজ কোলিশান হয়, তবে এটি একই ক্যোয়ারীতে সম্পূর্ণ স্ক্যানের কারণ হতে পারে।