আমার কাছে টেবিল রয়েছে, বলা আছে Address
, এটিতে একটি অবিরাম গণিত কলাম রয়েছে Hashkey
। কলামটি নির্বিচারবাদী তবে সঠিক নয়। এটির উপর এটির একটি অনন্য সূচক রয়েছে যা অন্বেষণযোগ্য নয়। আমি যদি এই কোয়েরিটি চালিত করি তবে প্রাথমিক কীটি ফিরে আসছি:
SELECT @ADDRESSID= ISNULL(AddressId,0)
FROM dbo.[Address]
WHERE HashKey = @HashKey
আমি এই পরিকল্পনাটি পেয়েছি:
যদি আমি সূচককে বাধ্য করি তবে আমি আরও খারাপ পরিকল্পনাটি পেয়েছি:
যদি আমি সূচী এবং সন্ধান উভয়ের জন্য চেষ্টা ও জোর করি তবে আমি একটি ত্রুটি পেয়েছি:
এই কোয়েরিতে সংজ্ঞায়িত ইঙ্গিতগুলির কারণে ক্যোয়ারী প্রসেসর কোনও ক্যোয়ারী প্ল্যান তৈরি করতে পারেনি। কোনও ইঙ্গিত নির্দিষ্ট না করে এবং ব্যবহার না করে কোয়েরিটি পুনরায় জমা দিন
SET FORCEPLAN
এটি ঠিক কারণ এটি ঠিক না? আমি ভেবেছিলাম যে এটি স্থির থাকলে কিছু যায় আসে না?
এটি একটি অ-গণিত কলাম না করে এই সূচিটি সন্ধানযোগ্য করার কোনও উপায় আছে কি?
কারও কি এই সম্পর্কে তথ্যের কোনও লিঙ্ক আছে?
আমি প্রকৃত সারণী তৈরি পোস্ট করতে পারি না, তবে এখানে একটি পরীক্ষার টেবিল যা একই সমস্যা:
drop TABLE [dbo].[Test]
CREATE TABLE [dbo].[Test]
(
[test] [VARCHAR](100) NULL,
[TestGeocode] [geography] NULL,
[Hashkey] AS CAST(
( hashbytes
('SHA',
( RIGHT(REPLICATE(' ', (100)) + isnull([test], ''), ( 100 )) )
+ RIGHT(REPLICATE(' ', (100)) + isnull([TestGeocode].[ToString](), ''), ( 100 ))
)
) AS BINARY(20)
) PERSISTED
CONSTRAINT [UK_Test_HashKey] UNIQUE NONCLUSTERED([Hashkey])
)
GO
DECLARE @Hashkey BINARY(20)
SELECT [Hashkey]
FROM [dbo].[Test] WITH (FORCESEEK) /*Query processor could not produce a query plan*/
WHERE [Hashkey] = @Hashkey