Fragmentacja Indexów na tabeli. SQL Server 2016

0

Hej Hej,

Scenariusz jest następujący. Mamy tabelę która zawierą pomędzy 1-1,5 wierszy. Codziennie jest czyszczona "delete from", oraz insertowana na nowo.

Zakładam, że dodanie indexów na kolumne która służy do wyszukiwania powinno pomóc w szybkości kwerend które się z tą tabelą łączą. Nie mniej, czy ten codzienny delete/insert zepsuje index? Czy po każdym insert powinienem robić rebuild indexów?

Z góry dziękuję!

0

Index powinien się przebudować sam po uśnięciu i dodaniu do tabelki nowych danych. Swoją drogą zamiast Delete from to lepiej truncate table. I jak się wkłada do tabletki 1.5 rekordu (półtorej)?

1

Ddelete from zapisuje wszystko do loga, przy dużej ilości wierszy może to zająć kilka godzin i zfailować bo log się nie zmieści na dysku (zdarzyło mi się) - wtedy trzeba podzielić delete na mniejsze operacje i usuwać po np milionie wierszy na raz. Po delete wartości auto increment zostaną takie same, możesz chcieć je zresetować. Co do indeksów to sprawdź ręcznie ich fragmentację po operacji, powinno być ok - w końcu będą puste. Możesz zawsze dać szybsze REORGANIZE żeby zmniejszyć użyty rozmiar na dysku jeśli się automatycznie nie zmniejszyły.
Lepiej użyć truncate jeśli możesz. Truncate nie trzyma logów, za to wymaga full table locka więc może w niektórych sytuacjach na żywej bazie wisieć w nieskończoność próbując go uzyskać. dużo łatwiej gdy masz jakiś maintenance window

0

Jeśli czyścisz całą tablice to może być efektywniej:

  • usunąć cały index
  • usunąć dane
  • wprowadzić dane
  • stworzyć index na nowo

1 użytkowników online, w tym zalogowanych: 0, gości: 1