เหตุใดการลบในมุมมองที่พาร์ติชันของฉันจึงทำให้การแทรกดัชนีแบบกลุ่ม?


9

ฉันมีมุมมองที่แบ่งพาร์ติชันซึ่งมีทริกเกอร์แทรกด้านล่าง (พาร์ติชัน Mans ไม่ดี) เมื่อฉันทำการลบฉันได้รับแผนแบบสอบถามด้านล่าง:

delete from factproductprice where pricedate = '20170725'

ป้อนคำอธิบายรูปภาพที่นี่

ทริกเกอร์ในมุมมอง:

ALTER TRIGGER [dbo].[factProductPriceDelete] ON [dbo].[FactProductPrice]
INSTEAD OF DELETE AS
BEGIN
  IF @@ROWCOUNT = 0 RETURN;

  DECLARE @PriceDate DATE
  SELECT @PriceDate = CAST(PriceDate AS DATE) FROM DELETED
  IF @PriceDate BETWEEN '20140101' AND '20141231'
  BEGIN
    DELETE FROM dbo.FactProductPrice2014
    WHERE ProductId IN (SELECT ProductId FROM DELETED) AND SalesPriceSchemeId IN (SELECT SalesPriceSchemeId FROM DELETED) AND PriceDate IN (SELECT PriceDate FROM DELETED) 
  END
  IF @PriceDate BETWEEN '20150101' AND '20151231'
  BEGIN
    DELETE FROM dbo.FactProductPrice2015
    WHERE ProductId IN (SELECT ProductId FROM DELETED) AND SalesPriceSchemeId IN (SELECT SalesPriceSchemeId FROM DELETED) AND PriceDate IN (SELECT PriceDate FROM DELETED) 
  END
  IF @PriceDate BETWEEN '20160101' AND '20161231'

.... เป็นต้น

คำตอบ:


11

INSTEAD OF ทริกเกอร์แทนที่การกระทำที่ทริกเกอร์อย่างสมบูรณ์

แทรกและลบหลอกตารางแสดงถึงการเปลี่ยนแปลงที่จะได้รับการทำมีคำสั่งเรียกดำเนินการจริง ไม่สามารถใช้การกำหนดเวอร์ชันแถวสำหรับทริกเกอร์เหล่านี้ได้เนื่องจากยังไม่มีการแก้ไขเกิดขึ้นตามคำจำกัดความ

SQL Server ปรับเปลี่ยนแผนการดำเนินการสำหรับคำสั่ง DML ที่กระตุ้นเมื่อมีINSTEAD OFทริกเกอร์อยู่ แทนที่จะแก้ไขตารางที่ได้รับผลกระทบโดยตรงแผนการดำเนินการเขียนข้อมูลเกี่ยวกับการเปลี่ยนแปลงไปยังโต๊ะทำงานที่ซ่อนอยู่

โต๊ะทำงานนี้มีข้อมูลทั้งหมดที่จำเป็นสำหรับการเปลี่ยนแปลงดั้งเดิมประเภทของการแก้ไขเพื่อดำเนินการในแต่ละแถว (ลบหรือแทรก) เช่นเดียวกับข้อมูลใด ๆ ที่จำเป็นในการเรียกสำหรับOUTPUTประโยค

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

ดูบทความ SQLPerformance.com ของฉันสิ่งที่น่าสนใจเกี่ยวกับแทนของทริกเกอร์

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