ฉันสร้างมุมมองที่จัดทำดัชนีไว้ใน SQL Server ตลอดเวลาเพื่อปรับแต่งผลิตภัณฑ์ที่มีอยู่ เครื่องมือเพิ่มประสิทธิภาพฉลาดพอที่จะใช้ดัชนีถ้าคุณใช้คอลัมน์ที่เหมาะสม
ใช้ตัวอย่างของคุณดูเหมือนว่าคุณสร้างมุมมอง แต่ไม่ได้สร้างดัชนีตามจริง
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
มุมมองนี้ใช้อย่างเหมาะสม:
ฉันไม่สามารถเปลี่ยนสคริปต์ SQL ของฉันทั้งหมดเพื่อเลือกจากมุมมองแทนตาราง ฉันต้องการสร้างมุมมองที่จัดทำดัชนีและบังคับให้ SQL Server รับข้อมูลจากพวกเขาแทนตาราง
ไม่มีคำใบ้หรือวิธีอื่นเพื่อบังคับให้ SQL Server ใช้มุมมองที่มีการจัดทำดัชนีเมื่อไม่มีการอ้างอิงในแบบสอบถาม
ข้อมูลเพิ่มเติม (จากGeoff Patterson )
อีกประเด็นหนึ่งคือในขณะที่เครื่องมือเพิ่มประสิทธิภาพสามารถใช้มุมมองที่จัดทำดัชนีในกรณีนี้ได้เท่านั้นในกรณีนี้อาจทำให้รู้สึกถึงการอ้างอิงมุมมองโดยตรงโดยใช้NOEXPAND
คำใบ้หากคุณต้องการแน่ใจว่าดัชนีดูใช้หรือ 100% หากคุณต้องการให้ใช้ใน Standard Edition
ฉันเคยเห็นข้อความค้นหาบ่อยครั้งแม้ใน Enterprise Edition ซึ่งเครื่องมือเพิ่มประสิทธิภาพไม่ได้รับความจริงที่ว่าดัชนีมุมมองสามารถใช้งานได้เว้นแต่NOEXPAND
จะใช้ เป็นเรื่องธรรมดามากขึ้นกับการสืบค้นที่ซับซ้อน แต่สามารถเกิดขึ้นได้กับการสืบค้นทั่วไป
Paul White เป็นหนึ่งในบทความที่ดีกว่าที่ฉันได้อ่านจากความแตกต่างของNOEXPAND
; นอกเหนือจากการใช้ดัชนีการดูแล้วคำใบ้ยังสามารถส่งผลกระทบต่อสิ่งต่างๆเช่นสถิติที่สร้างขึ้นโดยอัตโนมัติในมุมมองที่จัดทำดัชนีและการประมาณค่าความสำคัญเชิงหัวใจสำหรับแผน
และจากZane : ในฐานะที่เป็นบันทึกด้านโปรดใช้ความระมัดระวังกับมุมมองที่มีการจัดทำดัชนีเช่นเดียวกับดัชนีอื่น ๆ ซึ่งจะเพิ่มในการอัปเดตแทรกและลบเวลาของคุณ