| Termin | Definicja |
|---|---|
| Wydajność indeksu kolumnowego | Wydajność indeksu kolumnowego jest szczególnie wysoka przy zapytaniach analitycznych obejmujących duże wolumeny danych. Jak indeks kolumnowy przyspiesza zapytania analityczneIndeks kolumnowy przechowuje dane według kolumn, a nie według całych wierszy. W klasycznym układzie wierszowym wartości wszystkich pól rekordu znajdują się obok siebie, natomiast w układzie kolumnowym wartości jednej kolumny są grupowane razem. Taka organizacja odpowiada sposobowi pracy zapytań analitycznych, które często odczytują kilka kolumn z dużej tabeli, ale nie potrzebują wszystkich pól każdego rekordu. Przykładowe zapytanie może obliczać sumę sprzedaży według miesiąca, regionu albo kategorii produktu. Silnik bazy danych może wtedy odczytać tylko kolumny użyte w filtrze, grupowaniu i obliczeniach. Pozostałe kolumny nie muszą być pobierane z magazynu, co ogranicza liczbę operacji wejścia-wyjścia oraz ilość danych przekazywanych do pamięci. Korzyść jest szczególnie widoczna wtedy, gdy tabela zawiera wiele kolumn, a zapytanie wykorzystuje niewielki ich podzbiór. Kompresja, selekcja kolumn i zakres odczytywanych danychWartości występujące w pojedynczej kolumnie mają zwykle podobny typ i często powtarzają się częściej niż całe kombinacje wartości wiersza. Ułatwia to kompresję danych. Mniejszy rozmiar przechowywanych segmentów oznacza mniej danych do odczytania z dysku lub pamięci, a także mniejsze zapotrzebowanie na przepustowość między warstwą magazynu a procesorem. Skuteczność kompresji zależy jednak od charakteru danych. Kolumny o wielu unikatowych, długich wartościach mogą kompresować się słabiej niż kolumny zawierające powtarzalne kody, daty lub liczby. W wielu implementacjach dane kolumnowe są dzielone na większe grupy, nazywane segmentami, grupami wierszy albo blokami. Metadane opisujące taki fragment mogą zawierać między innymi minimalną i maksymalną wartość kolumny. Jeżeli warunek zapytania nie może być spełniony przez dany fragment, silnik może pominąć jego odczyt. Mechanizm ten jest określany jako eliminacja segmentów lub predykatów. Jego skuteczność zależy od uporządkowania danych, rozkładu wartości oraz rodzaju użytego predykatu. Samo utworzenie indeksu kolumnowego nie gwarantuje pominięcia wszystkich niepasujących danych. Wykonanie obliczeń w trybie wektorowymWydajność indeksu kolumnowego nie wynika wyłącznie z układu plików. Silniki baz danych mogą przetwarzać wiele wartości jednocześnie w trybie wektorowym, zamiast wykonywać tę samą operację osobno dla każdego wiersza. Grupowanie wartości w tablice robocze zmniejsza narzut wywołań operatorów zapytania i ułatwia wykorzystanie instrukcji procesora przeznaczonych do równoległego przetwarzania danych. Konkretne zachowanie zależy od silnika, planu wykonania oraz obsługiwanych operatorów. Indeks kolumnowy zwykle dobrze pasuje do skanowania dużych zakresów tabeli, agregacji, filtrowania oraz obliczeń wykonywanych na wielu rekordach. Nie oznacza to, że każde zapytanie będzie szybsze. Odczyt pojedynczego rekordu po bardzo selektywnym kluczu może wymagać innego rodzaju indeksu. Także częste modyfikacje małych partii danych, operacje wymagające szybkiego dostępu do pełnych wierszy oraz zapytania zwracające większość kolumn mogą ograniczyć przewagę układu kolumnowego. Ocena wymaga porównania planów wykonania, czasu zapytania, liczby odczytanych stron lub segmentów oraz zużycia pamięci. Warunki poprawnej oceny wydajnościPorównanie indeksu kolumnowego z innym sposobem przechowywania powinno korzystać z reprezentatywnego zbioru danych i rzeczywistych zapytań. Istotne są między innymi liczba wierszy, liczba kolumn, selektywność filtrów, rozkład wartości, częstotliwość aktualizacji oraz dostępna pamięć. Ten sam indeks może dawać różne wyniki po zmianie statystyk, rozmiaru bufora pamięci, stopnia równoległości albo sposobu ładowania danych. Pomiar pojedynczego uruchomienia nie wystarcza do wiarygodnej oceny, ponieważ wynik może zależeć od tego, czy dane znajdowały się już w pamięci. Diagnostyka problemu z wydajnością powinna obejmować plan wykonania i rzeczywisty profil pracy zapytania. Należy sprawdzić, czy silnik użył indeksu kolumnowego, czy odczytał tylko wymagane kolumny, czy pominął niepasujące segmenty oraz czy nie wykonał kosztownego sortowania lub konwersji typów. Warto również zweryfikować aktualność statystyk i sposób organizacji danych po dużej liczbie operacji zapisu. W przypadku komputera używanego do pracy z lokalną bazą problemy z procesorem, pamięcią RAM albo dyskiem mogą dodatkowo wpływać na czas operacji, ale nie zastępują analizy planu zapytania. |