2010-07-06 7 views
0

변경 사항이있을 경우 LastEditedTime 필드를 설정하기위한 트리거 (업데이트 용)가있는 테이블이 있습니다 - 간단합니다. 또한 LastStatusChangedTime을 설정하기 위해 업데이트 후 트리거가 있습니다. 문제는 다음과 같습니다 :sqlserver 2008 트리거

업데이트를 위해 두 개의 트리거를 사용하면 성능 문제가 있습니까? 또는 두 개의 트리거를 하나로 결합 할 수 있습니까?

다른 사람들이이 문제를 어떻게 처리하는지 궁금합니다.

감사합니다.

답변

0

FOR UPDATE가 TSQL이 실행되기 전에 작동하고 AFTER UPDATE가 실행 완료 후에 완료되기 때문에 단순히 결합 할 수 있다고 생각하지 않습니다.

성능은 코드의 품질에 따라 다릅니다.

동일한 코드가 하나의 트리거 또는 두 개의 트리거에 있으면 성능 차이가 없습니다.

지난 3 년 동안 나는 트리거가 없으면 할 수없는 한 가지를 만날 수밖에 없었습니다. 나는 개인적으로 가능한 한 많은 방아쇠를 멀리한다. 다른 SQL 문과 마찬가지로 쉽게 편집 할 수 있지만 데이터 편집 작업의 숨겨진 요소이므로 이러한 SQL 문을 조심해야합니다.

대량 업데이트를 위해 트리거를 실행하려면 해당 방법으로 실행되도록 트리거해야합니다. 그렇지 않으면 마지막 행에 대해 트리거를 실행합니다. 논의를 위해 트리거가 실행될 때까지 1 초가 걸린다고 가정 해 봅시다. RBAR을 수행하고 100 개의 행에 해당하는 업데이트를 실행하면 1 분 40 초까지 SQL 쿼리가 반환되지 않습니다.

이상하게도 Triggers (INSTEAD-OF 제외)를 사용하는 대부분의 개발자도 커서를 좋아합니다.

모두 내 2 펜스는 가능하면 멀리 떨어져 있어야합니다.

+0

마지막 문장은 사실이 아닙니다. SQL Server의 트리거는 업데이트되는 전체 데이터 집합에 대해 한 번 실행됩니다. 각 행에 대해 한 번만 실행됩니다. 코드를 올바르게 코딩했거나 세트 기반 방식으로 코딩했다고 가정하면 선형 성장에 가까운 곳을 보지 않아야합니다. 나는 조심스러워하는 당신의 다른 이유들에 동의합니다. –

+0

@Tom H 답변 수정 된 댓글 –