Witam,
Natrafiłem na pewien problem który w sumie można podsumować jako wybór między dżumą a cholerą.
Mam dość dużą bazę danych łącznie ~75 mln rekordów
Z tabeli która łącznie ma ok 65mln rekordów usunąć muszę ok 25mln. Gdyby to był zwykły batch delete wyłączyłbym indeksy i zrobił usuwanie w while po ok 100000 sztuk . Poroblem polega na tym że wylączenie indeksów moim zdaniem ma sens gdy czyścimy całą tabelę z rekordów. Ja niestety muszę wybierać rekordy do usunięcia a co gorsza wybierać je muszę po dacie i kluczu obcym z innej tabeli więc już w ogóle masakra wydajnościowa.
Czy w takiej sytuacji lepiej:
- czy wyłączyć indeksy nieklastrowe i pozwolić na wolniejsze wyszukiwanie
- zostawić indeksy i kosztem czasu wyszukiwania wydłużyć czas usuwania.
Na tabeli jest 5 indesków nieklastrowych i 1 klastrowy na PK. Oczywiśćie mówimy o usuwanie w paczkach po 100-300 tyś
Na innej tabeli na której zostawiłem index usuwanie 13 mln zajęło 1,5h (a to dużo biorąc po uwagę że na całość mam max 5h) a z moich obserwacji wynika że liniowo to ten czas niestety nie rośnie.
A więc dżuma czy cholera ? A może coś innego ?