Недавно я создал триггер SQL для замены очень дорогого запроса, который я использовал для уменьшения количества обновлений, которые моя база данных делает каждый день.SQL-триггер для таблицы аудита, выходящей из синхронизации
Перед тем, как преформ обновления я проверяю, чтобы узнать, сколько обновлений уже произошли в течение дня, это используется, чтобы сделать с помощью запроса:
SELECT COUNT(*) FROM Movies WHERE DateAdded = Date.Now
Ну моя база данных более 1 миллиона записей и этот запрос прогоните 1-2k в минуту, чтобы вы могли понять, почему я хотел использовать для этого новый подход.
Итак, я создал таблицу аудита и установил триггер SQL, чтобы обновить эту таблицу, если в таблице Movie произойдут какие-либо INSERT или UPDATE. Однако я замечаю, что таблица аудита выходит из синхронизации на несколько сотен каждый день (количество таблиц аудита выше фактических обновлений в таблице фильмов). Поскольку это не представляет огромной проблемы, мне просто интересно, что может быть причиной этого или как его отладить?
SQL Trigger:
ALTER TRIGGER [dbo].[trg_Audit]
ON [dbo].[Movies]
AFTER UPDATE, INSERT
AS
BEGIN
UPDATE Audit SET [count] = [count] + 1 WHERE [date] = CONVERT (date, GETDATE())
IF @@ROWCOUNT=0
INSERT INTO audit ([date], [count]) VALUES (GETDATE(), 1)
END
выше триггер происходит только после UPDATE или INSERT на столе Movie и пытается обновить счетчик + 1 в таблице аудита, и если он не существует (IF @ @ ROWCOUNT = 0), то он создает его. Любая помощь приветствуется! Благодарю.
Вы понимаете, что если вы обновите 10 записей сразу, этот триггер только увеличит счет на 1? – OGHaza
@OGHaza, который прекрасен, поскольку я никогда не обновляю или не вставляю больше одной записи за раз, также подсчет таблицы аудита (проблема синхронизации) выше, чем я возвращаюсь, когда я запрашиваю мою таблицу фильмов с WHERE DateAdded = Date.Now ... Это то, что я пытаюсь выяснить. – bfritz
Что означает, что триггер запускается больше, чем фактическое количество обновлений/вставок в базу данных. Я также тестировал, чтобы убедиться, что при создании и #tempTables это не срабатывает, и это было не так. – bfritz