ฉันจะเริ่มต้นด้วยตัวอย่างง่ายๆมาก: สองตารางทั้งคู่ด้วย schema เดียวกันทำคลัสเตอร์บน PK แต่หนึ่งในนั้นมีINSTEAD OF UPDATE
ทริกเกอร์:
CREATE TABLE Standard
(
PK UNIQUEIDENTIFIER PRIMARY KEY CLUSTERED,
V INT NOT NULL
)
GO
CREATE TABLE InsteadOf
(
PK UNIQUEIDENTIFIER PRIMARY KEY CLUSTERED,
V INT NOT NULL
)
GO
INSERT Standard (PK, V) VALUES ('1E58B555-B073-471E-B576-4B09C8E18976', 0)
INSERT InsteadOf (PK, V) VALUES ('1E58B555-B073-471E-B576-4B09C8E18976', 0)
GO
CREATE TRIGGER TR_InsteadOf_Update ON InsteadOf INSTEAD OF UPDATE
AS
BEGIN
DECLARE @PK UNIQUEIDENTIFIER
DECLARE @V INT
DECLARE @cursor CURSOR
SET @cursor = CURSOR FOR SELECT PK, V FROM Inserted
OPEN @cursor
FETCH NEXT FROM @cursor INTO @PK, @V
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE InsteadOf SET
V = @V
WHERE PK = @PK
FETCH NEXT FROM @cursor INTO @PK, @V
END
CLOSE @cursor
DEALLOCATE @cursor
END
GO
ถ้าฉันดูแผนแบบสอบถามสำหรับการปรับปรุงกับตารางมาตรฐานฉันจะได้รับการปรับปรุงดัชนีที่คาดการณ์ไว้:
UPDATE Standard SET
V = 1
WHERE PK = '1E58B555-B073-471E-B576-4B09C8E18976'
อย่างไรก็ตามถ้าฉันทำการปรับปรุงที่คล้ายกันกับตารางด้วยทริกเกอร์ฉันจะได้รับสิ่งที่ดูเหมือนจะแทรกดัชนีคลัสเตอร์เช่นเดียวกับการปรับปรุงดัชนีคลัสเตอร์:
UPDATE InsteadOf SET
V = 1
WHERE PK = '1E58B555-B073-471E-B576-4B09C8E18976'
ทำไมนี้ ฉันสามารถดูการปรับปรุงดัชนีคลัสเตอร์ที่ฉันคาดไว้ในภายหลังในแผนแบบสอบถามนี้ (แบบสอบถาม # 4) แต่ทำไมฉันถึงได้รับการแทรกพิเศษนี้ที่แบบสอบถาม # 1