Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Najbardziej wydajna metoda wykrywania zmian kolumn w MS SQL Server

Zacznijmy od tego, że nigdy i to znaczy nigdy nie wywoływać przechowywanego proc w wyzwalaczu. Aby uwzględnić wstawianie wielorzędowe, musiałbyś przejrzeć procedurę. Oznacza to, że 200 000 wierszy, które właśnie załadowałeś za pomocą zapytania opartego na zestawie (powiedzmy, że aktualizujesz wszystkie ceny o 10%) może blokować tabelę na wiele godzin, ponieważ wyzwalacz odważnie próbuje obsłużyć obciążenie. Dodatkowo, jeśli coś zmieni się w proc, możesz w ogóle złamać wszelkie wstawki do stołu lub nawet całkowicie zawiesić stół. Mocno wierzę, że kod wyzwalacza nie powinien wywoływać niczego poza wyzwalaczem.

Osobiście wolę po prostu wykonywać swoje zadanie. Jeśli zapisałem akcje, które chcę wykonać poprawnie w wyzwalaczu, zaktualizuje się, usunie lub wstawi tylko te, które uległy zmianie.

Przykład:załóżmy, że chcesz zaktualizować pole nazwisko, które przechowujesz w dwóch miejscach z powodu umieszczonej tam denormalizacji ze względu na wydajność.

update t
set lname = i.lname
from table2 t 
join inserted i on t.fkfield = i.pkfield
where t.lname <>i.lname

Jak widać, zaktualizowałby tylko nazwy, które są inne niż te, które są obecnie w aktualizowanej tabeli.

Jeśli chcesz przeprowadzić audyt i zapisać tylko te wiersze, które uległy zmianie, wykonaj porównanie, używając wszystkich pól, na przykład gdzie i.field1 <> d.field1 lub i.field2 <> d.field3 (itd. przez wszystkie pola)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można przekazać parametrów wejściowych do procedury składowanej

  2. Index znajdował się poza granicami Array. (Microsoft.SqlServer.smo)

  3. Kiedy decydujemy się na zastosowanie krzyżowe i kiedy decydujemy się na sprzężenie wewnętrzne w SQL Server 2012

  4. Jak włączyć wszystkie ograniczenia sprawdzania w bazie danych SQL Server — samouczek SQL Server / TSQL, część 88

  5. Jak zsumować Konta