Statystyki (1) Optymalizacja poleceń SQL Część 2. Statystyki (2) Statystyki (3) Informacje, opisujące dane i struktury obiektów bazy danych.

Podobne dokumenty
Optymalizacja poleceń SQL Statystyki

Optymalizacja poleceń SQL Metody dostępu do danych

Ć wiczenie 3. Statystyki, wskazó wki

Optymalizacja poleceń SQL Indeksy

Cwiczenie 2. Metody dostępu do danych

INDEKSY. Biologiczne Aplikacje Baz Danych. dr inż. Anna Leśniewska

"Kilka słów" o strojeniu poleceń SQL w kontekście Hurtowni Danych wprowadzenie. Krzysztof Jankiewicz

Optymalizacja poleceń SQL

Strojenie poleceń SQL. (c) Instytut Informatyki Politechniki Poznańskiej 221

Strojenie poleceń SQL. (c) Instytut Informatyki Politechniki Poznańskiej 221

Cwiczenie 4. Połączenia, struktury dodatkowe

Optymalizacja poleceń SQL

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

Indeksy. Rozdział 18. Indeksy. Struktura indeksu. Adres rekordu

Optymalizacja poleceń SQL Wprowadzenie

Wykład XII. optymalizacja w relacyjnych bazach danych

Język SQL. Rozdział 2. Proste zapytania

Optymalizacja zapytań. Proces przetwarzania i obliczania wyniku zapytania (wyrażenia algebry relacji) w SZBD

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Kosztowy optymalizator zapytań

Indeksowanie w bazach danych

Tabela wewnętrzna - definicja

Fazy przetwarzania polecenia SQL. Faza parsingu (2) Faza parsingu (1) Optymalizacja poleceń SQL Część 1.

Fizyczna struktura bazy danych w SQL Serwerze

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

Optymalizacja w relacyjnych bazach danych - wybór wydajnej strategii obliczania wyrażenia relacyjnego.

Optymalizacja. Plan wykonania polecenia SQL (1) Plan wykonania polecenia SQL (2) Rozdział 19 Wprowadzenie do optymalizacji poleceń SQL

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2. zadania

SQL (ang. Structured Query Language)

Bazy danych - BD. Indeksy. Wykład przygotował: Robert Wrembel. BD wykład 7 (1)

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Podstawowe zapytania SELECT (na jednej tabeli)

sprowadza się od razu kilka stron!

Język SQL. Rozdział 8. Język manipulowania danymi DML

Ćwiczenie 5. Strojenie poleceń SQL

Rozproszone bazy danych 3

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Indeksy. Indeks typu B drzewo

Administracja i programowanie pod Microsoft SQL Server 2000

060 SQL FIZYCZNA STRUKTURA BAZY DANYCH. Prof. dr hab. Marek Wisła

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

Wydajność hurtowni danych opartej o Oracle10g Database

Systemy GIS Tworzenie zapytań w bazach danych

Przestrzenne bazy danych Podstawy języka SQL

Podstawy języka SQL cz. 2

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

Wprowadzenie do języka SQL

Tworzenie tabeli przez select CREATE TABLE PRAC2 AS SELECT P.NAZWISKO, Z.NAZWA FROM PRAC P NATURAL JOIN ZESP Z

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Optymalizacja wydajności SZBD

Język SQL. Rozdział 7. Zaawansowane mechanizmy w zapytaniach

Relacyjne bazy danych. Podstawy SQL

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

Przykładowe B+ drzewo

Bazy danych. Plan wykładu. Przetwarzanie zapytań. Etapy przetwarzania zapytania. Translacja zapytań języka SQL do postaci wyrażeń algebry relacji

Zarządzanie obiektami bazy danych Oracle11g

Bazy danych. Plan wykładu. Model logiczny i fizyczny. Operacje na pliku. Dyski. Mechanizmy składowania

Ćwiczenie zapytań języka bazy danych PostgreSQL

Oracle11g: Wprowadzenie do SQL

Wprowadzenie do baz danych

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

Podstawy Informatyki. Metody dostępu do danych

Indeksy w hurtowniach danych

Wykład 6. SQL praca z tabelami 3

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Relacyjne bazy danych. Podstawy SQL

3. Podzapytania, łączenie tabel i zapytań

Wykład 5. SQL praca z tabelami 2

Technologie baz danych

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Fizyczna organizacja danych w bazie danych

SQL SERVER 2012 i nie tylko:

Laboratorium Bazy danych SQL 2

Ćwiczenie 3 funkcje agregujące

Bazy danych wykład dwunasty. dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36

INDEKSY I SORTOWANIE ZEWNĘTRZNE

Zadania SELECT do schematu EDS (EMP, DEPT, SALGRADE)

PODSTAWY BAZ DANYCH Wykład 6 4. Metody Implementacji Baz Danych

Cwiczenie 1. Wys wietlanie plano w wykonania polecen SQL

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Podzapytania. SELECT atrybut_1, atrybut_2,... FROM relacja WHERE atrybut_n operator (SELECT atrybut_1, FROM relacja WHERE warunek

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Język SQL. Rozdział 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

Widok Connections po utworzeniu połączenia. Obszar roboczy

Optymalizacja zapytań

Model relacyjny. Wykład II

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Wpływ ustawień parametru wieloblokowego sekwencyjnego czytania danych na czas wykonywania zapytania SQL w bazie danych Oracle 11g

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Kolekcje Zbiory obiektów, rodzaje: tablica o zmiennym rozmiarze (ang. varray) (1) (2) (3) (4) (5) Rozszerzenie obiektowe w SZBD Oracle

Transkrypt:

Statystyki (1) Informacje, opisujące dane i struktury obiektów bazy danych. Optymalizacja poleceń SQL Część 2. Statystyki i histogramy, metody dostępu do danych Przechowywane w słowniku danych. Używane przez optymalizator do oszacowania: selektywności predykatów polecenia, kosztu użycia ścieżek dostępu, kosztu operacji I/O i czasu procesora, kosztu planu wykonania polecenia. Tylko aktualne statystyki użyteczne! Statystyki są statyczne nie są automatycznie uaktualniane przy zmianie danych. 1 2 Statystyki (2) Statystyki (3) Przykłady statystyk: dla relacji: liczba rekordów, liczba bloków, średnia długość rekordu, dla atrybutu relacji: liczba różnych wartości, liczba rekordów, w których atrybut ma wartość pustą, rozkład wartości (histogram), dla indeksu: liczba bloków-liści, wysokość drzewa, wskaźnik zgrupowania indeksu, statystyki systemowe: wykorzystanie procesora, liczba operacji we/wy. Statystyki mogą być gromadzone automatycznie (przez dedykowany proces SZBD) lub ręcznie (na żądanie użytkownika) przy użyciu pakietu DBMS_STATS. W przypadku braku statystyk dla obiektów używanych w zapytaniu przed wykonaniem zapytania optymalizator realizuje dynamiczne próbkowanie statystyk. 3 4

Histogramy (1) Histogramy (2) Histogram szczegółowa statystyka opisująca rozkład wartości określonej kolumny relacji. Rodzaje: histogram o zrównoważonej wysokości (ang. height balanced) zbiór wartości kolumny dzielony jest na przedziały o tej samej (w przybliżeniu) liczbie rekordów; przykład (zakres wartości: <1, 100>, liczba przedziałów: 10): równomierny rozkład wartości atrybutu: 1 10 20 30 40 50 60 70 80 90 100 nierównomierny rozkład wartości atrybutu: Rodzaje (cd): histogram częstotliwości (ang. frequency) każda wartość kolumny odpowiada jednemu przedziałowi, każdy przedział zawiera liczbę wystąpień tej wartości; tworzony wtedy, gdy liczba wartości kolumny jest mniejsza bądź równa żądanej liczbie przedziałów histogramu. Histogramy należy tworzyć tylko dla kolumn z nierównomiernym rozkładem wartości (ang. skewed data), często używanych w warunkach zapytania. Gdy zmieni się rozkład danych kolumny, konieczne jest ponowne wygenerowanie histogramu, 1 10 10 10 30 40 40 40 65 80 100 5 6 Ręczne zbieranie statystyk Zbieranie statystyk dla indeksu Metody: na podstawie pełnych danych, szacowanie na podstawie próbki, próbka określana w procentach liczby rekordów. Procedury zbierające statystyki: DBMS_STATS.GATHER_INDEX_STATS dla indeksu, DBMS_STATS.GATHER_TABLE_STATS dla relacji. Procedury usuwające statystyki: DBMS_STATS.DELETE_INDEX_STATS dla indeksu, DBMS_STATS.DELETE_TABLE_STATS dla relacji, DBMS_STATS.DELETE_COLUMN_STATS dla kolumny. exec DBMS_STATS.GATHER_INDEX_STATS( ownname => <nazwa_schematu>, indname => <nazwa_indeksu>, estimate_percent => <procentowa_wielkość_próbki>); jeśli wartość <procentowa_wielkość_próbki> określono jako: null, wówczas statystyki zbierane na podstawie pełnych danych, liczbę z przedziału <0,00001; 100>, wówczas szacowanie na podstawie próbki o zadanym rozmiarze, DBMS_STATS.AUTO_SAMPLE_SIZE rozmiar próbki dobiera system. exec DBMS_STATS.GATHER_INDEX_STATS( ownname => 'SCOTT', indname => 'PK_PRAC', estimate_percent => 20); Uwaga! Od Oracle10g statystyki dot. indeksów są gromadzone automatycznie podczas tworzenia lub przebudowy indeksu. 7 8

Zbieranie statystyk dla relacji (1) Zbieranie statystyk dla relacji (2) exec DBMS_STATS.GATHER_TABLE_STATS( ownname => <nazwa_schematu>, tabname => <nazwa_relacji>, estimate_percent => <procentowa_wielkość_próbki>, method_opt => <rodzaj_statystyk>, cascade =><DBMS_STATS.AUTO_CASCADE TRUE FALSE> ); METHOD_OPT określa zakres zbieranych statystyk: FOR TABLE tylko statystyki dla tabeli bez statystyk dla kolumn, FOR ALL COLUMNS [<klauzula SIZE>] statystyki dla tabeli i statystyki dla wszystkich kolumn, FOR ALL INDEXED COLUMNS [<klauzula SIZE>] statystyki dla tabeli i statystyki dla poindeksowanych kolumn, FOR COLUMNS [<klauzula SIZE>] kolumna1 [<klauzula SIZE>], kolumna2 [<klauzula SIZE>],... statystyki dla tabeli i statystyki dla wskazanych kolumn. <klauzula SIZE> SIZE { liczba REPEAT AUTO SKEWONLY }: liczba liczba przedziałów w histogramie, zakres: <1, 254>, REPEAT powtórzenie zbierania histogramów dla kolumn, które mają już histogramy, AUTO SZBD określi, dla których kolumn zbierać histogramy na podstawie obciążenia i rozkładu danych kolumny, SKEWONLY SZBD określi, dla których kolumn zbierać histogramy tylko na podstawie rozkładu danych kolumny (bez analizy obciążenia). FOR ALL COLUMNS SIZE AUTO wartość domyślna dla par. METHOD_OPT: statystyki tabeli, podstawowe statystyki wszystkich kolumn tabeli, histogramy dla kolumn wyznaczonych na podstawie wcześniejszych obserwacji dotyczących obciążenia i rozkładu wartości. 9 10 Zbieranie statystyk dla relacji (3) Statystyki w słowniku bazy danych exec DBMS_STATS.GATHER_TABLE_STATS( ownname => 'SCOTT', tabname => 'PRACOWNICY', estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt => 'FOR COLUMNS placa_pod SIZE AUTO, nazwisko SIZE AUTO'); exec DBMS_STATS.GATHER_TABLE_STATS( ownname => 'SCOTT', tabname => 'PRACOWNICY', method_opt => 'FOR ALL INDEXED COLUMNS', cascade => TRUE); Uwaga! Od Oracle12c statystyki dotyczące tabel zostają zebrane automatycznie w sytuacji, gdy tabela, do której ładowane są dane ścieżką bezpośrednią (polecenie INSERT /*+ APPEND */, dane umieszczane od razu w plikach bazy danych z pominięciem bufora bazy danych), była poprzednio pusta: tabela została dopiero co utworzona i nie posiada jeszcze rekordów, lub usunięto z tabeli wszystkie rekordy. Dla relacji: USER_TABLES, USER_TAB_STATISTICS Dla kolumn: USER_TAB_COLUMNS, USER_TAB_COL_STATISTICS, USER_TAB_HISTOGRAMS Dla indeksów: USER_INDEXES, USER_IND_STATISTICS SELECT num_rows, blocks, last_analyzed, sample_size FROM USER_TAB_STATISTICS WHERE table_name = 'PRACOWNICY'; SELECT num_distinct, low_value, high_value, num_buckets, histogram FROM USER_TAB_COL_STATISTICS WHERE table_name = 'PRACOWNICY' AND column_name = 'NAZWISKO'; 11 12

Usuwanie statystyk Metody dostępu do danych exec DBMS_STATS.DELETE_INDEX_STATS( ownname => <nazwa_schematu>, indname => <nazwa_indeksu>); exec DBMS_STATS.DELETE_TABLE_STATS( ownname => <nazwa_schematu>, tabname => <nazwa_relacji>); exec DBMS_STATS.DELETE_COLUMN_STATS( ownname => <nazwa_schematu>, tabname => <nazwa_relacji>, colname => <nazwa_kolumny>, col_stat_type => <rodzaj_usuwanych_statystyk>); COL_STAT_TYPE: HISTOGRAM usuwany jest histogram dla kolumny, podstawowe statystyki kolumny pozostają, ALL usuwane są wszystkie statystyki dla kolumny (wartość domyślna). Określają, w jaki sposób dane polecenia SQL są odczytywane z miejsca ich fizycznej lokalizacji. Dostęp do tabeli: pełne przeglądnięcie, dostęp przy pomocy adresu rekordu. : unikalne przeglądnięcie indeksu, (odwrócone) zakresowe przeglądnięcie indeksu, przeglądnięcie indeksu z pominięciem kolumn, pełne przeglądnięcie indeksu, szybkie pełne przeglądnięcie indeksu, dostęp do indeksu bitmapowego, połączenie indeksów. Przy dostępie do indeksu dane zwykle zwracane w kolejności rosnącej. Ogólne zasady dostępu do danych: odczyt dużej części rekordów relacji pełne przeglądnięcie relacji, odczyt pojedynczych rekordów relacji dostęp za pomocą indeksu. 13 14 Dostęp do tabeli Pełne przeglądniecie tabeli Dostęp do tabeli Dostęp przy pomocy adresu rekordu Ang. full table scan Sekwencyjny odczyt wszystkich bloków danych, w których tabela przechowuje swoje rekordy, odfiltrowanie rekordów nie spełniających zdefiniowanych w poleceniu SQL kryteriów selekcji (np. w klauzuli WHERE). Stosowane gdy: brak indeksu dla relacji lub nie można użyć istniejących indeksów, DB_FILE_MULTIBLOCK_READ_COUNT zostanie odczytana duża część wszystkich bloków, w których tabela składuje swoje dane, rozmiar tabeli jest niewielki. Możliwy odczyt wieloblokowy pobranie w jednej operacji I/O wielu przyległych bloków danych, bardziej efektywne niż wiele odczytów pojedynczych bloków. Ang. rowid scan Odszukanie rekordu relacji na podstawie dostarczonego adresu rekordu (rowid). Najszybszy sposób dostępu do rekordów tabeli. Źródło adresu rekordu: warunek selekcji polecenia SQL, SELECT * FROM pracownicy WHERE rowid = AAAMMUAAEAAAAAtAAG ; pobranie z indeksu tabeli. 15 16

Unikalne przeglądnięcie indeksu Zakresowe przeglądnięcie indeksu Ang. index unique scan unikalnego, operacja zwraca co najwyżej jeden adres rekordu. Stosowane, gdy w poleceniu SQL zastosowano warunek równościowy z atrybutem, na którym zdefiniowano indeks unikalny (również ograniczenia klucz podstawowy i klucz unikalny). Ang. index range scan unikalnego (warunek inny niż równościowy) lub nieunikalnego, operacja zwraca zakres adresów rekordów. Stosowane, gdy w poleceniu SQL: warunek selekcji z kolumnami z części wiodącej indeksu, takie jak: kolumna = wartość, kolumna > wartość, kolumna < wartość (również kombinacje powyższych) kolumna like ABC% (% nie może być na początku wzorca), warunek złożony z ww. warunków ze spójnikiem AND, klauzula ORDER BY lub GROUP BY z atrybutami z części wiodącej indeksu. 17 18 Odwrócone zakresowe przeglądnięcie indeksu Przeglądnięcie indeksu z pominięciem kolumn Ang. index range scan descending Odmiana zakresowego przeglądnięcia indeksu. Dane zwracane w kolejności malejącej. Stosowane, gdy: w poleceniu konieczne posortowanie danych w porządku malejącym, przy poszukiwaniu wartości mniejszych niż wartość wyspecyfikowana. Ang. index skip scan Operacja korzystająca z indeksu złożonego dla polecenia, w którym nie występuje kolumna z początku części wiodącej klucza indeksowego: indeks dzielony jest na mniejsze podindeksy, liczba podindeksów jest równa liczbie wartości pierwszej kolumny w kluczu indeksowym, podindeksy skanowane są kolejno operacja zastępuje pełne przeglądnięcie relacji. Przykład: relacja Pracownicy(id_prac, adres, płeć), indeks o strukturze klucza: (płeć, id_prac), zapytanie: select * from Pracownicy where id_prac = 100 indeks zostaje podzielony na dwa podindeksy: dla wartości płeć = M i dla wartości płeć = K, podindeksy zostają przeskanowane kolejno. 19 20

Pełne przeglądnięcie indeksu Szybkie pełne przeglądnięcie indeksu Ang. full index scan Stosowane, gdy: w warunku polecenia SQL odwołania do kolumn z klucza indeksowego, kolumny nie muszą być częścią wiodącą klucza, brak odwołań do poindeksowanych kolumn w warunku polecenia, ale: wszystkie kolumny, do których występuje odwołanie w poleceniu (np. w klauzuli SELECT), znajdują się w kluczu indeksowym, przynajmniej jedna z tych kolumn nie jest pusta. Odczytywane są wszystkie liście indeksu w porządku, bloki indeksu odczytywane pojedynczo. Używane głównie do eliminacji operacji sortowania relacji dane są posortowane wg klucza indeksowego. Ang. fast full index scan Stosowane, gdy: wszystkie kolumny, które są używane w poleceniu SQL, występują w kluczu indeksowym, co najmniej jedna z tych kolumn ma zdefiniowane ograniczenie NOT NULL. Zastępuje pełne przeglądnięcie relacji wynik polecenia SQL uzyskuje się bezpośrednio z indeksu, bez konieczności dostępu do relacji. Odczytywane są wszystkie liście indeksu przy zastosowaniu odczytu wieloblokowego większa wydajność niż pełne przeglądnięcie indeksu, ale nie zostaje zachowane uporządkowanie. Nie może być używany do eliminacji operacji sortowania relacji dane nie są posortowane wg klucza indeksowego. 21 22 bitmapowego Połączenie indeksów Składa się z dwóch kroków: 1. dostęp do bitmapy, 2. konwersja bitmapy do adresów rekordów (krok opuszczany w przypadku możliwości realizacji polecenia bez dostępu do relacji). W przypadku poleceń z warunkiem złożonym (spójniki AND i OR, negacja), operacje koniunkcji, alternatywy i negacji wykonywane bezpośrednio na bitmapach (widoczne w planie wykonania polecenia). 23 Ang. index join Stosowane w przypadku, gdy wszystkie kolumny, używane w poleceniu SQL, znajdują się w kluczach kilku różnych indeksów. Wynik polecenia uzyskuje się tylko z indeksów, bez konieczności dostępu do relacji. Nie może być stosowane do eliminacji operacji sortowania relacji. Przykład: SELECT id_prac FROM pracownicy WHERE placa_pod >1000; Range scan(indeks na placa_pod) placa_pod ROWID 1600 00000001.001.001... 2000... 00000001.0A1.01E join (hash) 120... 140 Fast Full Scan(indeks na id_prac) id_prac 120... 140 ROWID 00000001.0A1.01E... 00000001.001.001 24

Wskaźnik zgrupowania indeksu (1) Wskaźnik zgrupowania indeksu (2) Minimalną jednostką operacji I/O jest blok dyskowy a nie rekord Statystyka, pozwalająca na porównanie kosztu operacji przeglądnięcia indeksu z kosztem pełnego przeglądnięcia tabeli Określa, jak mocno indeks jest "zsynchronizowany" z tabelą: mała wartość rekordy tabeli z tymi samymi (lub zbliżonymi) wartościami poindeksowanej kolumny są skupione w niewielkiej liczbie bloków duża wartość rekordy tabeli z tymi samymi (lub zbliżonymi) wartościami poindeksowanej kolumny są rozproszone w dużej liczbie bloków Interpretacja: mała wartość (równa lub bliska liczbie bloków tabeli) dobrze, użycie indeksu jest korzystne w stosunku do pełnego przeglądnięcia tabeli z powodu konieczności wykonania mniejszej liczby operacji odczytu bloków tabeli (odczytu danych) po dostępie do indeksu (po odczycie adresów rekordów) duża wartość (równa lub bliska liczbie rekordów tabeli) źle, użycie indeksu jest niekorzystne w stosunku do pełnego przeglądnięcia tabeli z powodu konieczności wykonania większej liczby operacji odczytu bloków tabeli po dostępie do indeksu Słownik danych SELECT clustering_factor FROM user_indexes WHERE index_name = PRAC_PK ; 25 26 Wskaźnik zgrupowania indeksu (3) Przykład tabela posiada 9 rekordów, poindeksowana kolumna K1 posiada trzy wartości A, B i C (po trzy rekordy), rekordy zajmują 3 bloki. Przypadek 1. Mała wartość wskaźnika. Niski koszt skanu indeksu odczyt A wymaga dostępu do jednego bloku tabeli BLOK 1 BLOK 2 BLOK 3 A A A B B B C C C Przypadek 2. Duża wartość wskaźnika. Wyższy koszt skanu indeksu odczyt A wymaga dostępu do wszystkich trzech bloków tabeli BLOK 1 BLOK 2 BLOK 3 A B C A B C A B C 27