Чому виконання видалення на моєму розділеному представленні призводить до вставки кластерного індексу?


9

У мене розміщено подання з розділом, що містить нижній тригер вставки (поганий розділ mans). Коли я виконую DELETE, я отримую наступний план запитів:

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 " Цікаві речі про ВСТАНОВУ тригерів" .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.