বিদ্যমান পণ্যগুলিকে টিউন করার জন্য আমি এসকিউএল সার্ভারে সারাক্ষণ সূচিযুক্ত ভিউ তৈরি করি। আপনি যদি যথাযথ কলামগুলি ব্যবহার করেন তবে অপ্টিমাইজারটি সূচকটি ব্যবহার করতে যথেষ্ট স্মার্ট is
আপনার উদাহরণটি ব্যবহার করে, দেখে মনে হচ্ছে আপনি দৃশ্যটি তৈরি করেছেন তবে বাস্তবে এটি কোনও সূচক তৈরি করেন নি।
if object_id(N'mytable1') is not null
drop table mytable1
if object_id(N'mytable2') is not null
drop table mytable2
go
Create table mytable1 (ID int identity(1,1), Name1 nvarchar(100))
GO
Create table mytable2 (ID int identity(1,1), Name2 nvarchar(100))
GO
insert into mytable1 values ('steve')
insert into mytable1 values ('jack')
insert into mytable1 values ('mike')
insert into mytable1 values ('ralph')
insert into mytable1 values ('simon')
insert into mytable2 values ('smith')
insert into mytable2 values ('jackson')
insert into mytable2 values ('mikaelson')
insert into mytable2 values ('montalvo')
insert into mytable2 values ('singer')
go
if object_id(N'myview') is not null
drop view myview
go
Create view myview
with schemabinding
as
select a.id, a.name1, b.name2
from dbo.mytable1 a
join dbo.mytable2 b on a.Id = b.Id
GO
select a.name1, b.name2
from mytable1 a join mytable2 b on a.Id = b.Id
GO
যেহেতু এই দৃশ্যে কোনও সূচক নেই, তাই আমরা বেস টেবিলগুলিতে স্ক্যান করি:
তবে একবার আমরা একটি সূচক যুক্ত করলে, অপ্টিমাইজারটি এটি ব্যবহার করতে পারে:
CREATE UNIQUE CLUSTERED INDEX [ix_cl_names] ON [myview]
(
[name1] ASC,
[name2] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
এটি দৃশ্যের যথাযথ ব্যবহার করেছে:
টেবিলের পরিবর্তে ভিউ থেকে নির্বাচন করতে আমি আমার সমস্ত এসকিউএল স্ক্রিপ্ট পরিবর্তন করতে পারি না। আমি ইনডেক্সড ভিউ তৈরি করতে চাই এবং এসকিউএল সার্ভারকে টেবিলের পরিবর্তে এগুলি থেকে ডেটা পেতে বাধ্য করি।
কোয়েরিতে রেফারেন্স না দেওয়া অবস্থায় এসকিউএল সার্ভারকে একটি সূচক দৃষ্টিভঙ্গি প্রয়োগ করতে বাধ্য করার কোনও ইঙ্গিত বা অন্য পদ্ধতি নেই।
অতিরিক্ত তথ্য ( জিওফ প্যাটারসন থেকে )
একটি অতিরিক্ত বিষয় হ'ল অপ্টিমাইজারটি কেবলমাত্র এন্টারপ্রাইজ সংস্করণে এই ক্ষেত্রে সূচী দৃষ্টিভঙ্গিটি ব্যবহার NOEXPAND
করতে পারে, তবে আপনার যদি সূচকটি ব্যবহারের 100% নিশ্চিত হওয়ার প্রয়োজন হয় তবে আপনার ইঙ্গিতটি ব্যবহার করে সরাসরি ভিউটি উল্লেখ করা অর্থ হতে পারে বা আপনি যদি কখনও এটি স্ট্যান্ডার্ড সংস্করণে ব্যবহার করতে চান।
এমনকি প্রায়শই আমি এন্টারপ্রাইজ সংস্করণে কোয়েরি দেখেছি যেখানে অপ্টিমাইজারটি এই সত্যটি গ্রহণ করে না যে ভিউ সূচকটি ব্যবহার না NOEXPAND
করা হলে ব্যবহার করা যেতে পারে । জটিল প্রশ্নের সাথে এটি আরও সাধারণ, তবে সাধারণ প্রশ্নের সাথেও ঘটতে পারে।
পল হোয়াইটের আরও ভাল নিবন্ধগুলির মধ্যে আমি পড়লাম এর ঘনত্বগুলি অন্বেষণ করে NOEXPAND
; কেবলমাত্র দেখার সূচকের ব্যবহারের বাইরে, ইঙ্গিতটি এমন কিছুর উপরও প্রভাব ফেলতে পারে যেমন পরিকল্পনার জন্য সূচিযুক্ত ভিউ এবং কার্ডিনালটির প্রাক্কলনের উপর পরিসংখ্যান স্বয়ংক্রিয়ভাবে তৈরি করা হয়।
এবং জেন থেকে : সাইড নোট হিসাবে, সূচীদারি দৃষ্টিভঙ্গিগুলির সাথে সাবধানতা অবলম্বন করুন অন্য কোনও সূচির মতো এটি আপনার আপডেটে যোগ, সন্নিবেশ করানো এবং বার মুছবে।