w komentarzu czytamWkładka luzem z lub bez indeksu
Podobnie jak marginesie, to czasami szybciej spadać indeksy tabeli i odtworzyć je po operacji wstawiania luzem.
Czy to prawda? W jakich okolicznościach?
w komentarzu czytamWkładka luzem z lub bez indeksu
Podobnie jak marginesie, to czasami szybciej spadać indeksy tabeli i odtworzyć je po operacji wstawiania luzem.
Czy to prawda? W jakich okolicznościach?
Podobnie jak w przypadku Joela, powtórzę stwierdzenie, że tak, może to być prawda. Odkryłem, że kluczem do zidentyfikowania scenariusza, o którym wspomniał, jest rozmieszczenie danych i rozmiar indeksu (indeksów), które posiadasz w konkretnej tabeli.
W aplikacji, której używałem do obsługi zwykłego importu zbiorczego 1,8 miliona wierszy, z 4 indeksami w tabeli, 1 z 11 kolumnami i łącznie z 90 kolumnami w tabeli. Importowanie za pomocą indeksów zajęło ponad 20 godzin. Upuszczenie indeksów, wstawienie i ponowne utworzenie indeksów zajęło tylko 1 godzinę i 25 minut.
Może to być duża pomoc, ale wiele z nich sprowadza się do danych, indeksów i rozkładu wartości danych.
Tak, to prawda. Gdy podczas wstawiania znajdują się indeksy na stole, serwer będzie musiał stale zamawiać/stronicować tabelę, aby indeksy były aktualne. Jeśli upuścisz indeksy, może po prostu dodać wiersze, nie martwiąc się o to, a następnie skompilować indeksy naraz, kiedy je ponownie utworzysz.
Wyjątkiem jest oczywiście sytuacja, gdy dane importu są już w kolejności indeksowej. Powinienem zauważyć, że pracuję teraz nad projektem, w którym zaobserwowano ten przeciwny skutek. Chcieliśmy zmniejszyć czas uruchamiania dużego importu (nightly dump z systemu mainframe). Próbowaliśmy usunąć indeksy, zaimportować dane i ponownie je utworzyć. To faktycznie znacznie wzrosła czas na zakończenie importu. Ale nie jest to typowe. Po prostu pokazuje, że zawsze powinieneś najpierw przetestować swój system.
Czy wstawienie nowych danych do tabeli tymczasowej, a następnie zrobienie czegoś takiego jak INSERT INTO TABLE x (SELECT * FROM y) byłoby wykonalną alternatywą? W zależności od DB, może to być związane z pewną optymalizacją indeksów - lub może jestem odejść od znaku –
Nie, ponieważ wtedy robisz dwie wstawki. Oczywiście twoja sytuacja może się różnić, ale ogólnie to nie pomoże. –
Fajnie - to była tylko myśl. –
Jedną z rzeczy, którą należy wziąć pod uwagę przy upuszczaniu i odtwarzaniu indeksów, jest to, że powinno się to odbywać tylko w przypadku zautomatyzowanych procesów uruchamianych w okresach wolumenu użytkowania bazy danych. Podczas upuszczania indeksu nie można go używać do innych kwerend, które inni użytkownicy mogą jednocześnie kontrolować. Jeśli zrobisz to w godzinach produkcji, użytkownicy prawdopodobnie zaczną narzekać na przekroczenie limitu czasu.
Wydaje mi się, że w naszym przypadku duża część tego polegała na tym, że zawsze zaczynaliśmy od pustej tabeli, a dane masowe przychodziły w kolejności klastrów. Dlatego niewiele się dzieje. –
Ach tak, to byłaby dobra część tego. Zawsze zaczynaliśmy od pustego stołu, ale dane wejściowe były wszędzie! –