Chciałbym celowo utworzyć złe warunki indeksowania w testowej bazie danych SQL Server 2017, którą mam, żeby lepiej zrozumieć te skrypty konserwacji? SQL Server Indeks i utrzymanie statystyk
Czy istnieje szybki / automatyczny sposób na naruszenie integralności indeksu lub zwiększenie fragmentacji indeksu? Czy znasz jakieś przydatne zasoby, na które mogę spojrzeć, aby to osiągnąć?
sql-server
index
clustered-index
mororo
źródło
źródło
DBCC SHRINKDATABASE ([yourNONProdDB])
Odpowiedzi:
Jednym szybkim sposobem, jaki mogę sobie wyobrazić, jest utworzenie tabeli
UNIQUEIDENTIFIER
jako klucza podstawowego i wstawienie wielu losowych wartości. Można to osiągnąć za pomocą tego skryptu:To wygeneruje milion wierszy.
Wiedząc, że
NEWID()
nie gwarantuje to żadnego zamówienia, SQL Server będzie musiał wstawić do przypadkowych miejsc w tabeli - to spowoduje fragmentację klucza podstawowego.źródło
INSERT dbo.Tests (Id) SELECT NEWID(); GO 1000000;
- to oczywiście zajmie więcej czasu. Zobacz pastebin.com/SVLtiRnP, aby zobaczyć przykład, który rzuciłem razem na kolejne pytanie. Korzystanie z wierszy o zmiennej długości i ich losowe aktualizowanie może bardziej efektywnie powodować fragmentację?Chciałem zrobić kilka indeksów „brzydkich”, więc wykonałem następujące czynności. Działa dobrze
źródło
Zazwyczaj fragmentacja indeksu zachodzi, gdy istnieje
Update
lubInsert
operacja ma miejsce na stole.Jeśli chcesz szybko produkować emisji (fragmentacji Index), utworzyć
Index
w tabeli testowej z mniejfill factor
i zrobić ciężkiUpdate
lubInsert
operacji na tej tabeli. Możesz pracować z tymi skryptami ..źródło
Możesz również użyć
CRYPT_GEN_RANDOM
tak jak ja w tej odpowiedzi: Filtruj schemat w indeksie Skrypt optymalizacji .Możesz wstawić dane do kolumny numerycznej z indeksem, aby podzielić ją w następujący sposób:
Możesz także zaktualizować dane lub przekonwertować na ciąg zamiast liczby, jeśli tego potrzebujesz.
źródło