Koszty operacji we/wy między skanami indeksu a skanami tabel różnią się zasadniczo pod względem dostępu do danych, liczby odczytania stron oraz wydajności opartej na selektywności zapytania i organizacji danych.
Skany indeksu obejmują dostęp do danych poprzez przemierzanie struktury indeksu (często B-drzewo). Koszt tutaj obejmuje przede wszystkim dwa komponenty: koszt dostępu do stron indeksu i koszt pobierania odpowiednich stron tabeli. Strony indeksu mają na ogół wzorce dostępu losowego, ponieważ indeksowe węzły liści mogą nie być fizycznie ciągłe na dysku, co prowadzi do losowych operacji we/wy. Każdy logiczny stado w dół drzewa indeksu od korzenia do liścia wymaga stron odczytu, a koszt ten jest szacowany za pomocą parametru losowego kosztu strony systemu. Po zlokalizowaniu wpisów indeksu dla odpowiednich wierszy system pobiera odpowiednie strony danych tabeli. Liczba takich pobierania strony zależy od selektywności zapytania i fizycznej korelacji między przechowywanymi danymi a kolejnością indeksu (znaną jako korelacja). Wysoka korelacja oznacza, że lokalizacje wierszy indeksu ściśle odpowiadają kolejności danych fizycznych, zmniejszając losowe we/wy i zwiększając wydajność skanowania indeksu. Z drugiej strony niska korelacja prowadzi do wielu losowych pobierania, co znacznie zwiększa koszt we/wy.
Koszt procesora w skanach indeksowych obejmuje przetwarzanie każdego poszczególnego wiersza odzyskanego, ale głównym problemem kosztów jest we/wy. Istnieje również aspekt widoczności: jeśli baza danych ma widoczność śledzenia mapy, które strony danych są w pełni widoczne dla wszystkich transakcji, system może czasem całkowicie pomijać odczyt niektórych stron podczas skanowania tylko przez indeks, drastycznie obniżając koszty we/wy.
Natomiast skanowanie tabeli lub pełne skany tabeli działają, odczytując wszystkie strony danych sekwencyjnie z tabeli. Tutaj jest głównie sekwencyjny, który zwykle jest szybszy niż losowy I/O na dysku wirujących lub mniej karany na SSD. Koszt pełnego skanowania tabeli jest względnie stały, ponieważ odczytuje całą tabelę niezależnie od liczby wierszy spełniających zapytanie. Koszt ten zależy od całkowitej liczby stron w tabeli, a nie od liczby wybranych wierszy. Pełne skany tabeli nie korzystają z selektywności; Muszą odczytać każdą stronę, nawet jeśli zapytanie filtruje mocno rzędami. Jednak dzięki nowoczesnym technologiom i optymalizacjom, takim jak odczyty wielu bloków, odczyty równoległe i odciążenie warstwy pamięci, koszt pełnych skanów tabel może być konkurencyjny lub nawet mniej niż skany indeksu dla pytań, które pobierają znaczną część tabeli.
Optymalizator oparty na kosztach (CBO) decyduje między użyciem skanowania indeksu a pełnym skanowaniem tabeli w oparciu o szacunkowe koszty. W przypadku wysoce selektywnych zapytań, w których tylko niewielka część wierszy należy pobrać skany indeksowe, mają zwykle niższe koszty we/wy, ponieważ pobiera mniej stron stołowych. Wraz ze wzrostem progu selektywności (potrzebnych więcej wierszy), koszt skanów indeksu we/wy wzrasta z powodu większej liczby losowych pobierania stron i przemieszczania indeksu, ostatecznie przekraczając koszt pełnego skanowania tabeli. W tym momencie CBO sprzyja skanowaniu tabeli, ponieważ sekwencyjny koszt we/wy jest mniejszy niż losowe obciążenie we/wy wielu wyszukiwań indeksowych.
Kolejnym ważnym czynnikiem wpływającym na różnicę kosztów we/wy jest „współczynnik klastrowania” lub fizyczne grupowanie wierszy odpowiadających klawiszom indeksu. Niższy współczynnik grupowania (lepsze klastrowanie) oznacza, że rzędy dostępu za pośrednictwem indeksu znajdują się fizycznie blisko siebie, zmniejszając losowe we/wy i poprawia wydajność skanowania wskaźnika. Wyższy współczynnik grupowania prowadzi do bardziej losowych we/wy podczas skanowania indeksu i zmniejsza jego korzyść w porównaniu do skanu tabeli.
Nowoczesne systemy baz danych mogą również wdrażać skany równoległe zarówno skany indeksowe, jak i pełne tabeli, w których zasoby we/wy i procesora są udostępniane między wieloma pracownikami, co może skrócić całkowity czas zapytania. Jednak fundamentalny charakter we/wy dla skanów indeksu (dostępny dostęp do strony) w porównaniu z skanami tabel (głównie sekwencyjny dostęp do strony) pozostaje kluczowym wyróżnikiem.
Podsumowując kluczowe punkty dotyczące różnic kosztów we/wy:
- Skanowanie indeksu ponoszą koszty we/wy ze stron indeksu odczytu (dostęp losowy) plus pobieranie odpowiednich stron danych (potencjalnie losowy dostęp). Koszt jest wrażliwy na współczynnik selektywności, korelacji i klastrowania.
- Pełne skany tabeli wykonują sekwencyjne odczyt we/wy, o stosunkowo stabilnym koszcie we/wy niezależnie od selektywności.
- Skany indeksu mogą przewyższyć, gdy zapytania są ukierunkowane na małe podzbiory danych, ale cierpią z powodu losowych kosztów danych we/wy, gdy wzrasta selektywność.
- Pełne skanowanie tabeli mogą być bardziej wydajne, gdy duży ułamek tabeli wymaga dostępu z powodu wydajnych sekwencyjnych we/wy.
- Mapy widoczności i skanowanie tylko indeksu mogą obniżyć koszty we/wy w niektórych przypadkach skanowania indeksu, unikając odczytów strony danych.
- Parallelizm może poprawić oba typy skanowania, ale nie zmienia podstawowych właściwości we/wy.
- Optymalizator równoważy te czynniki kosztów wyboru najbardziej wydajnej metody opartej na zapytaniach i charakterystyce danych.