Mam tabelę w bazie danych SQL Server z indeksem klastrowym na kluczu podstawowym. Tabela ma 1 milion wierszy. Jeśli usunę 10 000 wierszy z tabeli, czy indeks zostanie zrestrukturyzowany podczas operacji usuwania?
Operacja usuwania jest częścią procedury składowanej. Jednocześnie więcej niż jeden klient może wykonywać procedurę przechowywaną, jednak każde pojedyncze uruchomienie usunie swój własny zestaw wierszy (jednoznacznie identyfikowany przez klucz podstawowy). Dostaję blokowanie blokady klawiatury (typu U), gdy wielu klientów wykonuje tę procedurę. Blokada blokady należy do wiersza z tej samej tabeli i nie jest częścią żadnej z równolegle działających transakcji. Nie powinno być żadnego blokowania, ponieważ każde uruchomienie próbuje usunąć swój własny zestaw wierszy. Eskalacja blokady nie ma miejsca, ponieważ jest wyłączona.
Podejrzewam, że operacja usunięcia musi powodować ponowne wyważenie indeksu, a zatem podczas procesu restrukturyzacji może mieć blokadę klawiszy w dowolnym wierszu tabeli.
Byłbym bardzo wdzięczny za każdą opinię na ten temat.
źródło
Odpowiedzi:
Aby odpowiedzieć na pytanie w tytule, czy B-drzewo ponownie zbalansowało się podczas usuwania, odpowiedź wydaje się nie, przynajmniej w następującym minimalnym przypadku testowym.
Poniższa wersja demonstracyjna uruchamia polecenia, które najlepiej pozostawić w środowisku testowym.
Ta wersja demonstracyjna pokazuje, że usunięcie może wygenerować bardzo niezrównoważone drzewo b, z praktycznie wszystkimi danymi po jednej stronie.
źródło