Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak obliczany jest współczynnik klastrowania Oracle Index

Spis treści

Co to jest współczynnik klastrowania indeksu Oracle (CF)?

Współczynnik klastrowania to liczba reprezentująca stopień losowego rozkładu danych w tabeli w porównaniu z indeksowaną kolumną. Mówiąc prościej, jest to liczba „przełączników bloku” podczas czytania tabeli za pomocą indeksu.

Jest to ważna statystyka, która odgrywa ważną rolę w obliczeniach optymalizatora. Służy do ważenia obliczeń dla skanów zakresu indeksu. Gdy współczynnik klastrowania jest wyższy, koszt skanowania zakresu indeksu jest wyższy

Dobry współczynnik klastrowania jest równy (lub zbliżony) do wartości liczby bloków tabeli.

Zły współczynnik klastrowania jest równy (lub zbliżony) do liczby wierszy tabeli.

Jak obliczany jest CF?

Oracle oblicza współczynnik klastrowania, wykonując pełne skanowanie indeksu przechodzącego przez bloki liści od końca do końca. Dla każdego wpisu w każdym liściu Oracle sprawdza bezwzględny numer pliku i identyfikator bloku uzyskany z ROWID wartości indeksowanej. Utrzymuje bieżącą liczbę, ile „różnych” bloków zawiera wiersze danych, na które wskazuje indeks. Adres bloku z pierwszego wpisu jest porównywany z adresem bloku z drugiego wpisu. Jeśli jest to ten sam blok tabeli, Oracle nie zwiększa licznika. Jeśli bloki tabeli są różne, Oracle dodaje jeden do liczby. Ten proces liczenia trwa od wpisu do wpisu, zawsze porównując poprzedni wpis z bieżącym.

Powyższe jest dobrym przykładem CF, ponieważ CF jest równa liczbie bloków

Przykład złego klastrowania

Tutaj współczynnik grupowania jest równy liczbie wierszy

Ta metoda liczenia ma swój nieoczekiwany wynik. Załóżmy, że dane są umieszczane w małym zestawie bloków, ale nie w kolejności zgodnej z kluczem indeksu, wtedy zestaw wierszy może wyglądać na duży zestaw bloków, gdy może jest tylko kilka naprawdę odrębnych bloków . Więc CF byłby wyższy, ale w rzeczywistości dotyka bardzo niewielu bloków. Ten problem można złagodzić w 12c, używając preferencji tabeli i określając blok w pamięci podręcznej w tabeli.

jak poprawić współczynnik klastrowania w Oracle

Przebudowa indeksu nie miałaby żadnego wpływu na czynnik skupienia. Tabela musi zostać posortowana i przebudowana w celu obniżenia współczynnika klastrowania.

Zapytanie w celu określenia współczynnika klastrowania 

CF jest przechowywany w słowniku danych i można go przeglądać z dba_indexes (lub user_indexes).

W rzeczywistości wszystkie statystyki indeksów można znaleźć tam

SELECT index_name, index_type, uniqueness, blevel, leaf_blocks, distinct_keys, avg_leaf_blocks_per_key,
avg_data_blocks_per_key, clustering_factor, num_rows, sample_size, last_analyzed, partitioned
FROM dba_indexes
WHERE table_name = 'ORDERS' ;

Jak czynnik klastrowania indeksów Oracle wpływa na plan optymalizatora?

Współczynnik klastrowania to podstawowa statystyka używana przez optymalizator do ważenia ścieżek dostępu do indeksu. Jest to szacunkowa liczba obiektów LIO w blokach tabeli wymaganych do pobrania wszystkich wierszy, które spełniają zapytanie w kolejności. Im wyższy współczynnik klastrowania, tym więcej LIO będzie wymaganych przez optymalizator. Im więcej LIO jest wymaganych, tym mniej atrakcyjne, a tym samym bardziej kosztowne, będzie korzystanie z indeksu.

Powiązany artykuł
Indeks partycji Oracle:Zrozumienie indeksu partycji Oracle, Co to są globalne indeksy niepartycjonowane?, Co to są indeksy lokalne z prefiksem, indeks lokalny bez prefiksu
znajdź indeksy w tabeli w Oracle:zapoznaj się z tym artykułem, aby znaleźć zapytania dotyczące sposobu aby znaleźć indeksy w tabeli w oracle, wymień wszystkie indeksy w schemacie, status indeksu, kolumna indeksu
rodzaje indeksów w oracle :Ta strona zawiera informacje o indeksach oracle, różne typy indeksów w oracle z przykładem, jak utworzyć/upuścić/zmienić indeks w Oracle
Wirtualny indeks w Oracle :Co to jest wirtualny indeks w Oracle? Zastosowania, ograniczenia, zalety i jak sprawdzić plan wyjaśnień w bazie danych Oracle, Ukryty parametr _USE_NOSEGMENT_INDEXES


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd podczas dodawania trybu gotowości

  2. Jak uzyskać zawartość tekstową z BLOB w Oracle SQL?

  3. Dodaj zbiorczo brakujące dane z poprzedniego miesiąca lub roku

  4. Używanie CONTINUE In Loops do wznowienia kontroli w Oracle

  5. Jaka jest różnica między ROWNUM a ROW_NUMBER w bazie danych Oracle?