เหตุใดผู้ดำเนินการรวมจึงใช้หลังจากการสแกนดัชนีที่ไม่ซ้ำ


15

ฉันมีตารางที่มีดัชนีที่ไม่ซ้ำซึ่งกรองแล้วสำหรับค่าที่ไม่เป็นโมฆะ ในแผนแบบสอบถามมีการใช้งานที่แตกต่างกัน มีเหตุผลสำหรับสิ่งนี้หรือไม่?

USE tempdb

CREATE TABLE T1( Id INT NOT NULL  IDENTITY PRIMARY KEY ,F1 INT , F2 INT )
go
CREATE UNIQUE NONCLUSTERED INDEX UK_T1 ON T1 (F1,F2) WHERE F1 IS NOT NULL AND F2 IS NOT NULL 
GO
INSERT INTO  T1(f1,F2) VALUES(1,1),(1,2),(2,1)

SELECT DISTINCT   F1,F2 FROM T1 WHERE F1 IS NOT NULL AND F2 IS NOT NULL 
SELECT  F1,F2 FROM T1 WHERE F1 IS NOT NULL AND F2 IS NOT NULL  

แผนแบบสอบถาม: ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


15

นี่เป็นข้อ จำกัด ของเครื่องมือเพิ่มประสิทธิภาพการสืบค้น SQL Server ที่เป็นที่รู้จัก มีการรายงานไปยัง Microsoft แต่ปิดการเชื่อมต่อรายการ (ไม่มีแล้ว) จะไม่แก้ไข

ข้อ จำกัด นี้มีผลเพิ่มเติมเพิ่มเติมรวมถึงสิ่งที่ฉันเขียนในข้อ จำกัด ของเครื่องมือเพิ่มประสิทธิภาพพร้อมดัชนีที่กรองแล้วสรุปจะถูกยกมาด้านล่าง:

โพสต์นี้เน้นข้อ จำกัด ของเครื่องมือเพิ่มประสิทธิภาพที่สำคัญสองข้อด้วยดัชนีที่ผ่านการกรอง:

  • ภาคการเข้าร่วมซ้ำซ้อนอาจจำเป็นเพื่อให้ตรงกับดัชนีที่กรอง
  • ดัชนีเฉพาะที่กรองแล้วจะไม่ให้ข้อมูลที่เป็นเอกลักษณ์แก่เครื่องมือเพิ่มประสิทธิภาพ

ในบางกรณีการเพิ่มเพรดิเคตซ้ำซ้อนให้กับทุกแบบสอบถามอาจเป็นประโยชน์ ทางเลือกคือแค็ปซูลเพรดิเคตที่ต้องการในมุมมองที่ไม่ได้จัดทำ แผนการจับคู่แฮชในโพสต์นี้ดีกว่าแผนเริ่มต้นถึงแม้ว่าเครื่องมือเพิ่มประสิทธิภาพควรจะสามารถหาแผนการเข้าร่วมผสานที่ดีขึ้นเล็กน้อย บางครั้งคุณอาจต้องจัดทำดัชนีมุมมองและใช้NOEXPANDคำแนะนำ (จำเป็นต้องใช้สำหรับอินสแตนซ์ของ Standard Edition) ในสถานการณ์อื่น ๆ ยังคงไม่มีวิธีการใดที่เหมาะสม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.