У нас много взаимно-однозначных отношений в довольно большой базе данных. Коллега создал представление, чтобы собрать всю эту информацию в одну область для использования в качестве единого объекта в нашем .NET-проекте.
Представление имеет триггеры вставки, обновления и удаления, которые все работают хорошо, единственная проблема - это обновление, выполнение которого занимает ~ 7 секунд, что слишком долго. Поскольку база данных очень хорошо проиндексирована (хотя представление и нет), я считаю, что проблема заключается в том, как выполняется представление
Структура триггера обновления выглядит следующим образом:
update table1 set col1 = i.col1, col2 = i.col2 .....
from inserted i
inner join table1 t1 on i.id = t1.id
update table2 set col1 = i.t2_col1, col2 = i.t2_col2......
from inserted i
inner join table2 t2 on i.id = t2.t1Id
if @@rowcount = 0 begin
insert table2 (t1Id, col1, col2....)
select i.t1Id, i.t2_col1, i.t2_col2..... from inserted i
end
/* There are an additional 9 update .... if @@rowcount = 0 insert statements */
Таким образом, я понимаю, что независимо от того, какое свойство обновляется, все операторы обновления выполняются, что вызывает проблему с производительностью.
Я перехожу к тому факту, что нам придется переписать слой доступа к данным, чтобы избавиться от этого представления, но я подумал, что я спросил, есть ли какие-либо предложения на основе SQL о том, как ускорить этот триггер вверх
Любая помощь будет принята с благодарностью