noexpand hint สำหรับรุ่นที่ไม่ใช่ enterpise และประสิทธิภาพ


11

ฉันต้องใช้มุมมองที่จัดทำดัชนีเพื่อให้ได้ประสิทธิภาพ อย่างที่ฉันเห็นจากตารางเปรียบเทียบรุ่นมาตรฐานนี้ไม่รองรับมุมมองที่จัดทำดัชนีไว้ แต่ BOL พูดว่า:

สามารถสร้างมุมมองที่จัดทำดัชนีใน SQL Server รุ่นใดก็ได้ ใน SQL Server Enterprise เครื่องมือเพิ่มประสิทธิภาพคิวรีจะพิจารณามุมมองที่จัดทำดัชนีโดยอัตโนมัติ หากต้องการใช้มุมมองที่จัดทำดัชนีไว้ในรุ่นอื่น ๆ ทั้งหมดจะต้องใช้คำใบ้ตาราง NOEXPAND

มันจะทำงานได้ดี (ฉันกำลังพูดถึงการแสดง)

select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals)

บน SQL Server Standard edition และทำงานได้

select * from dbo.OrderTotals

ในองค์กรหรือไม่

นี่คือรหัสสำหรับการดู:

CREATE VIEW dbo.OrderTotals
WITH SCHEMABINDING
AS
select 
    OrderId     =   r.OrderId                   
  , TotalQty            =   SUM(r.Quantity)
  , TotalGrossConsid    =   SUM(r.Price * r.Quantity)
  , XCount      =   COUNT_BIG(*)
from dbo.Order r
group by r.OrderId

CREATE UNIQUE CLUSTERED INDEX IXCU_OrderTotals ON OrderTotals (OrderId)

คำตอบ:


14

ความแตกต่างคือรุ่น Enterprise ที่ไม่มีคำใบ้อาจตัดสินใจว่าจะไม่ใช้มุมมองที่จัดทำดัชนี แต่ใช้ตารางพื้นฐานแทน

ประสบการณ์ส่วนตัวของฉันคือ SQL Server ค่อนข้างจะฉลาดในเรื่องนี้ ฉันมักจะต้องใช้คำใบ้: แบบสอบถามนั้นเร็วกว่าโดยมี IO น้อยกว่าแม้ว่าแผน "ดู" จะแย่ลงเมื่อสแกนในมุมมองไม่ใช่ดัชนีค้นหาบนตารางฐาน และมันก็วิ่งอย่างต่อเนื่องเช่นกัน

YMMV แน่นอน :-)

ดังนั้นเพื่อตอบมันจะ (ควร?) ทำงานเหมือนกันตามสิ่งที่ฉันเคยเห็น ชาวบ้านคนอื่นอาจมีประสบการณ์ที่แตกต่างและฉันสนใจคำตอบอื่น ๆ

เพื่อหลีกเลี่ยงการใช้คำใบ้ทุกที่คุณสามารถรวมมุมมองที่มีการจัดทำดัชนีไว้ในมุมมองอื่นด้วยคำใบ้: คำแนะนำแพร่กระจายภายในไปยังคำค้นหาภายนอกทั้งหมดจะมี NOEXPAND โดยอัตโนมัติ


ฉันได้รับ "คำใบ้ดัชนีไม่สามารถระบุได้ภายในวัตถุที่ถูกผูกไว้กับสกีมา" เมื่อพยายามสร้างมุมมองด้านนอกด้วยแบบแผนที่เป็นเลือก * จาก OrderTotals ด้วย (noexpand, index = IXCU_xxx) :)
garik

2
@garik: ฉันเพิ่งจะมี NOEXPAND ไม่ใช่คำใบ้ดัชนี มีเพียงหนึ่งดัชนีอยู่แล้ว: มันเป็นกลุ่มดังนั้น table scan = index scan
gbn

ไม่มีการสนทนา ปิด :)
garik

Woaaa ... การฝัง NOEXPAND ... Smart, luv it ...
Jérôme Verstrynge
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.