У меня есть сервер 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
Все работает, как ожидалось, но очень медленно. Кто-нибудь знает, как это ускорить?