Ускорить SQL Сервер ПОСЛЕ ВСТАВЛЕННОГО триггера - PullRequest
0 голосов
/ 16 июня 2020

У меня есть сервер SQL Express 2019 с таблицей, на которой я создал триггер, который обновляет строку этой таблицы при вставке другой строки. Мне нужно ВСТАВИТЬ около 100 000 строк в день. К сожалению, вставка срабатывает около 1-2 часов, что нормально, но при тестировании разочаровывает. Это моя структура таблицы:

    [ID] BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY, 
    [REPORT_ID] BIGINT NOT NULL, 
    [CLUSTER_ID] BIGINT NOT NULL, 
    [ID_NEXT] BIGINT NULL, 
    [CREATED_AT] DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    [ID_SUCCESSOR] BIGINT NULL, 
    [CREATED_AT] DATETIME NOT NULL DEFAULT GETUTCDATE(), 
    CONSTRAINT [FK_CRASHREPORTS_REPORTS2CLUSTERS_CRASHREPORTS] FOREIGN KEY ([REPORT_ID]) REFERENCES [CRASHREPORTS]([ID]),
    CONSTRAINT [FK_CRASHREPORTS_REPORTS2CLUSTERS_ID_PREV] FOREIGN KEY ([ID_NEXT]) REFERENCES [CRASHREPORTS_REPORTS2CLUSTERS]([ID]),
    CONSTRAINT [FK_CRASHREPORTS_REPORTS2CLUSTERS_ID_PREV] FOREIGN KEY ([ID_SUCCESSOR]) REFERENCES [CRASHREPORTS_REPORTS2CLUSTERS]([ID]),
    CONSTRAINT [FK_CRASHREPORTS_REPORTS2CLUSTERS_CRASHREPORTS_CLUSTERS_ID] FOREIGN KEY ([CLUSTER_ID]) REFERENCES [CRASHREPORTS_CLUSTERS]([ID])

И это мой триггер:

CREATE TRIGGER [dbo].[update_prev_after_insert]
    ON [dbo].[CRASHREPORTS_REPORTS2CLUSTERS]
    AFTER INSERT
    AS
    BEGIN
        MERGE INTO [dbo].[CRASHREPORTS_REPORTS2CLUSTERS] T
            USING inserted I
            ON T.ID != I.ID AND T.ID_SUCCESSOR is NULL and T.REPORT_ID = I.REPORT_ID
        WHEN MATCHED THEN
        UPDATE SET ID_SUCCESSOR = I.ID;
    END

Все работает, как ожидалось, но очень медленно. Кто-нибудь знает, как это ускорить?

...