To bardzo szerokie pytanie, które zasadniczo sprowadza się do "to zależy". Czynniki, które mają na to wpływ, to:
Jaki jest twój poziom współbieżności? Instrukcja delete umieszcza wyłączną blokadę dla dotkniętych wierszy. W zależności od silnika bazy danych, usuniętej dystrybucji danych itp., Które mogą przechodzić na stronę lub całą tabelę. Czy twoi czytelnicy danych mogą zostać zablokowani na czas usuwania?
Jak złożona jest instrukcja usuwania? Do ilu innych stołów dołączasz lub czy są złożone klauzule WHERE? Czasami identyfikacja wierszy do usunięcia może być bardziej "kosztowna" niż samo usunięcie, więc jedno duże usunięcie może być "tańsze".
Czy boisz się impasu? Zmniejszając rozmiar usuwania, zmniejsza się "odcisk stopy" impasu. W idealnej sytuacji usuwanie jednowierszowe zawsze się powiedzie.
Czy zależy Ci na wydajności przepustowości? Podobnie jak w przypadku każdej instrukcji SQL, istnieje ogólnie stała ilość narzutów (połączenia, parsowanie zapytań, zwracanie wyników itd.). Z punktu widzenia pojedynczego połączenia usuwanie o wartości 1000 wierszy będzie szybsze niż 1000 x 1-wierszowe usuwanie.
Nie zapomnij o kosztach utrzymania indeksu, oczyszczaniu fragmentacji lub jakichkolwiek wyzwalaczach. Mogą również wpływać na twój system.
Ogólnie rzecz biorąc, ja test porównawczy na 1000 linii na oświadczenie. Większość systemów, z którymi pracowałem (pod "przedsiębiorstwo") kończy się słodkim punktem od 500 do 5000 rekordów na usuwanie. Chciałbym zrobić coś takiego:
set rowcount 500
select 1 -- Just to force @@rowcount > 0
while @@ROWCOUNT > 0
delete from [table]
[where ...]
Na takie niejasne pytanie nie można odpowiedzieć. Nie ma srebrnej kuli. – zerkms
Używamy wsadowej pracy w ruchu, aby przenosić zapisy z jednej tabeli do drugiej. Prowadzimy partie o wartości 10.000, a wydajność jest znikoma. – Dimitri
Będziesz musiał spróbować dodać pewne ograniczenia i monitorować wydajność serwera, aby uzyskać najlepszą odpowiedź. – piotrekkr