Testuję szybkość wstawiania wielu wierszy za pomocą pojedynczej instrukcji INSERT.Wiele wierszy z jednym INSERT w SQLServer 2008
Na przykład: WKŁADKA DO [MojaTabela] Wartości (5 ", psa), (6 'kot'), (3„rybiego)
to bardzo szybko, dopóki nie przekroczy 50 rzędach jedno zdanie, potem prędkość znacznie spada.
Wstawienie 10000 rzędów z partiami po 50 sekund zajmuje 0,9 sekundy. Wstawienie 10000 wierszy z partiami 51 zajmuje 5,7 sekundy.
Moje pytanie składa się z dwóch części:
- dlaczego jest taki trudny spadek wydajności przy 50?
- Czy mogę polegać na tym zachowaniu i zakodować moją aplikację, aby nigdy nie wysyłać partii większych niż 50?
Moje testy zostały wykonane w języku C++ i ADO.
Edycja: Wygląda na to, że punktem odsuwania nie jest 50 wierszy, ale 1000 kolumn. Otrzymuję podobne wyniki w przypadku 50 wierszy z 20 kolumn lub 100 wierszy z 10 kolumn.
Mam wrażenie, że jest gorzej z powodu analizowania danych wejściowych. – Andrey
Pełne i całkowite zgadywanie: mniej niż 50 wierszy jest buforowanych w pamięci RAM przez SQL Server, ale większe wstawki są uważane za bardziej "ważne" i są natychmiast zapisywane na dysku? Szczerze mówiąc nie jestem pewien (stąd komentarz zamiast odpowiedzi) –