Tworzenie indeksu na naprawdę zajętym stole

11

Mamy tabelę z dużą ilością za insert\selectkażdym razem (na przykład 100 maszyn wstawiających \ aktualizujących co sekundę).

Jaki jest najlepszy sposób utworzenia indeksu na stole, którego nie można zablokować nawet na sekundę?

Jeśli utworzę indeks, jestem pewien, że zablokuje on żądania i nie mogę tego zrobić.

To duży stół z 1 milionem wierszy +.

Racer SQL
źródło

Odpowiedzi:

12

Nie ma takiej opcji jak CREATE INDEX WITH (NOLOCK)(a nawet NOLOCKprzy zapytaniu wymaga blokad, tylko mniej niż bez podpowiedzi).

Najlepsze, co zamierzasz zrobić, to WITH (ONLINE = ON)wciąż blokuje się na początku i na końcu operacji (obie odnoszą się do ponownych kompilacji planów związanych z tabelą - więcej szczegółów można znaleźć w tym blogu autorstwa Paula Randala ).

To znacznie zmniejszy wpływ budowania indeksu na twoje aplikacje, ale nie ma praktycznego sposobu na całkowite wyeliminowanie tego wpływu. Ponadto ta funkcja nie jest darmowa: wymaga wersji Enterprise.

Aaron Bertrand
źródło