2010-09-24 12 views
6

Potrzebuję znaleźć najlepszy sposób na wstawienie lub aktualizację danych w bazie danych przy użyciu serwera sql i asp.net. Jest to standardowy scenariusz, jeśli istnieją dane, jest aktualizowany, jeśli nie jest wstawiony. Wiem, że istnieje wiele tematów na ten temat, ale nikt nie odpowiedział na to, co muszę wiedzieć.Sql bulk insert/update vs MERGE w scenariuszu wstawiania lub aktualizacji

Moim problemem jest to, że naprawdę nie ma problemu, gdy aktualizujesz/wstawiasz 5k - 10k wierszy, ale co z 50k i więcej.

Mój pierwszy pomysł polegał na użyciu polecenia sql server 2008 MERGE, ale mam pewne uwzględnienie wydajności, jeśli będzie to 50k + wiersze. Również nie wiem, czy mogę w ten sposób zmanipulować danych w oparciu nie o podstawowy klucz id (int), ale o inny unikalny klucz w tabeli. (w szczególności numer seryjny produktu, który nie ulegnie zmianie w czasie).

Mój drugi pomysł polegał na tym, że najpierw wszystkie seriale produktów, a następnie porównać nowe seriale danych z tym i podzielić je na dane do wstawienia i dane do aktualizacji, a następnie po prostu zrobić jedną wstawkę zbiorczą i jedną aktualizację zbiorczą.

Po prostu nie wiem, który będzie lepszy, z MERGE nie wiem, jaka będzie wydajność i jest obsługiwana tylko przez serwer sql 2008, ale wygląda dość prosto, druga opcja nie potrzebuje sql 2008, partie powinny być szybkie, ale wybranie pierwszych wszystkich seriali i ich podzielenie może mieć pewne kary za wydajność.

Co sądzisz o tym, co wybrać?

+0

Czy decydujesz się na uaktualnienie do wersji 2008 lub czy rozpowszechniasz aplikację, która może wymagać uruchomienia na wielu wersjach SQL Server? Ponieważ jeśli już to posiadasz, powinieneś być w stanie przetestować Merge dla wydajności. – JeffO

+0

Yeh, będę musiał uaktualnić, aby użyć marge, to nie jest problem, ale jeśli marge jest gorszy w działaniu, to po prostu nie wiem, czy warto. – Programista

Odpowiedz

4

Merge performace sposób lepiej, bo „Jedną z najważniejszych korzyści z oświadczeniem Merge to wszystkie dane są odczytywane i przetwarzane tylko raz”

Nie trzeba klucz podstawowy, można dołączyć na jednej lub kilku dziedzinach, co czyni twoje zapisy wyjątkowymi

+0

Nie rozumiem. –

+0

cześć, której nie dostałeś? – Ivo

+0

Brak scalenia zbiorczego. Jak może być "o wiele lepiej" w kontekście wstawiania zbiorczego i aktualizacji? –

2

Nie powinno być problemu z wykonaniem scalenia na numerze seryjnym, zgodnie z opisem. Możesz przeczytać Optimizing MERGE Statement Performance, aby zapoznać się z zalecanymi przez Microsoft sprawdzonymi metodami podczas korzystania z MERGE.

Powiązane problemy