2012-11-15 10 views
7

Niedawno zaktualizowałem do wersji MSSQL 2008 R2 i zastanawiałem się, czy "nowa" funkcja Merge była wydajniejsza/szybsza niż skracanie i wstawianie do aktualizacji tabel, ponieważ każda tabela ma miliony wierszy. Jeśli ktokolwiek mógłby podać jakieś dane dotyczące ich wydajności, byłoby świetnie, ale jakiekolwiek wyjaśnienie byłoby pomocne!MERGE vs TRUNCATE i INSERT

+0

To zależy od liczby rzędów, które musisz dodać. Prawdopodobnie istnieje wartość progowa, w której czas wykonania jest taki sam dla 'merge' i' truncate ... insert'. –

+0

Nie zapominaj, że 'TRUNCATE' zresetuje twoje" bieżące "wartości tożsamości, podczas gdy będą one zachowane przy użyciu scalania. –

Odpowiedz

1

Nie jestem pewien, czy poprawnie podałem twój punkt TRUNCATE i INSERT. Jeśli nie, to możesz mnie poprawić.

MERGE jest rozumiany jako mechanizm służący do wykonania albo UPDATE do istniejącego wiersza, albo w przypadku, gdy istniejący wiersz nie zostanie znaleziony, INSERT.

Sugerujesz: TRUNCATE i INSERT, które usuwają użycie funkcji MERGE, ponieważ wszystko byłoby INSERT. Nie mam pojęcia, czy MERGE w tym przypadku byłby szybszy, czy nie, ponieważ nigdy go nie wypróbowałem, ale przypuszczam, że część MERGE, która określa, czy używać UPDATE lub INSERT, nakłada pewne koszty .

+0

Zastanawiam się, czy używać MERGE zamiast TRUNCATE i INSERT, nie obu. Przepraszam za zamieszanie. –

+0

Cześć Kevin. Być może źle napisałem. Podobnie jak w przypadku TR3, założyłem również, że próbujesz kopiować dane z jednej tabeli do drugiej. Jeśli tak jest, to trzymałbym się 'TRUNCATE' i' INSERT', ponieważ zakładam, że część "MERGE", która weryfikuje, czy użyć 'UPDATE', dodaje narzut. Jeśli szukasz prostego sposobu na sklonowanie pojedynczego stolika, możesz spróbować spojrzeć na to pytanie SO: Jak zrobić codzienne zdjęcia stołu - http://stackoverflow.com/questions/8813808/how-to-take-daily-snapshot-of-a-table – SchmitzIT

1

Użyłem MERGE ponieważ musiałem śledzić zmiany danych (zachowałem sumę kontrolną wierszy), ale ponieważ wydaje się, że po prostu potrzebujesz tych danych "sklonowanych" za każdym razem, nie widzę żadnego konkretnego powodu, aby użyć MERGE, po wszystkim MERGE robi jakieś rodzaje kontroli (jest kontrola kluczy głównych i dodatkowe warunki są umieszczane na każdym WHEN); za pomocą TRUNCATE a potem większość INSERT nie powinien mieć wszystko, że warunki w sztuce

przy okazji nie brać tego jako 100% prawdziwe, nie mam żadnego testu wydajności do wniesienia jako dowód; Proponuję wypróbować obie operacje i zobaczyć, który z nich zajmuje więcej czasu =)