Pytanie Jak działa indeksowanie baz danych?


Biorąc pod uwagę, że indeksowanie jest tak ważne, jak twój zestaw danych, zwiększa się rozmiar, czy ktoś może wyjaśnić, jak działa indeksowanie na poziomie agnostycznym bazy danych?

Aby uzyskać informacje na temat zapytań do indeksowania pola, sprawdź Jak zaindeksować kolumnę bazy danych.


1878
2017-08-04 10:07


pochodzenie


Możesz sprawdzić - Jak działa indeksowanie baz danych? - Aniket Thakur


Odpowiedzi:


Dlaczego jest potrzebny?

Gdy dane są przechowywane na dyskowych urządzeniach magazynujących, są przechowywane jako bloki danych. Bloki te są dostępne w całości, co czyni je operacją dostępu do dysku atomowego. Bloki dyskowe są zbudowane w taki sam sposób, jak połączone listy; oba zawierają sekcję dla danych, wskaźnik do lokalizacji następnego węzła (lub bloku) i oba nie muszą być przechowywane w sposób ciągły.

Ze względu na fakt, że wiele rekordów może być sortowanych tylko na jednym polu, możemy stwierdzić, że wyszukiwanie w niezarejestrowanym polu wymaga wyszukiwania liniowego, które wymaga N/2 blokować dostęp (średnio), gdzie N to liczba bloków, które obejmuje stół. Jeśli to pole nie jest polem klucza (tzn. Nie zawiera unikatowych wpisów), należy przeszukać cały obszar tabel N blokuj dostęp.

Podczas gdy w przypadku sortowanego pola można użyć Wyszukiwania Binarnego, które ma log2 N blokuj dostęp. Ponieważ dane są posortowane przy użyciu pola innego niż klawisz, reszta tabeli nie musi być przeszukiwana pod kątem duplikatów, gdy zostanie znaleziona wyższa wartość. Zatem wzrost wydajności jest znaczny.

Co to jest indeksowanie?

Indeksowanie to sposób sortowania wielu rekordów na wielu polach. Utworzenie indeksu na polu w tabeli tworzy kolejną strukturę danych, która przechowuje wartość pola i wskaźnik do rekordu, do którego się odnosi. Ta struktura indeksu jest następnie sortowana, umożliwiając wykonanie na niej binarnych wyszukiwań.

Wadą indeksowania jest to, że te indeksy wymagają dodatkowego miejsca na dysku, ponieważ indeksy są przechowywane razem w tabeli przy użyciu silnika MyISAM, plik ten może szybko osiągnąć limity rozmiaru podstawowego systemu plików, jeśli wiele pól w tej samej tabeli jest indeksowanych .

Jak to działa?

Po pierwsze, nakreślmy przykładowy schemat tabeli bazy danych;

Nazwa pola Typ danych Rozmiar na dysku
id (klucz podstawowy) Bez znaku INT 4 bajty
firstName Char (50) 50 bajtów
lastName Char (50) 50 bajtów
emailAddress Char (100) 100 bajtów

Uwaga: char został użyty zamiast varcharu, aby umożliwić dokładny rozmiar na wartości dysku. Ta przykładowa baza danych zawiera pięć milionów wierszy i jest niezweryfikowana. Skuteczność kilku zapytań zostanie przeanalizowana. Są to kwerendy używające ID (posortowane pole klucza) i jedno za pomocą Imię (bez klucza nieposortowane pole).

Przykład 1 - posortowane vs niesortowane pola

Biorąc pod uwagę naszą przykładową bazę danych r = 5,000,000 zapisy o stałym rozmiarze, dając rekordową długość R = 204 bajtów i są przechowywane w tabeli przy użyciu silnika MyISAM, który używa domyślnego rozmiaru bloku B = 1,024bajty. Czynnikiem blokującym w tabeli byłby bfr = (B/R) = 1024/204 = 5 zapisy na blok dysku. Całkowita liczba bloków wymaganych do utrzymania tabeli N = (r/bfr) = 5000000/5 = 1,000,000 Bloki.

Wyszukiwanie liniowe w polu identyfikacyjnym wymagałoby średniej wartości N/2 = 500,000 blokuje dostęp w celu znalezienia wartości, biorąc pod uwagę, że pole id jest polem kluczowym. Ale ponieważ pole identyfikatora jest również sortowane, można przeprowadzić wyszukiwanie binarne, które wymaga średniej log2 1000000 = 19.93 = 20 blokuj dostęp. Od razu widać, że jest to drastyczna poprawa.

Teraz Imię pole nie jest ani sortowane, ani kluczowym polem, więc wyszukiwanie binarne jest niemożliwe, ani wartości nie są unikalne, a zatem tabela będzie wymagać dokładnego wyszukiwania do końca dla dokładnego N = 1,000,000 blokuj dostęp. Właśnie ta sytuacja ma na celu poprawienie indeksowania.

Biorąc pod uwagę, że rekord indeksu zawiera tylko indeksowane pole i wskaźnik do oryginalnego rekordu, ma on powody, że będzie on mniejszy niż rekord wielopolowy, na który wskazuje. Zatem sam indeks wymaga mniejszej liczby bloków dysków niż pierwotna tabela, co wymaga mniejszej liczby przejść blokowych do iteracji. Schemat indeksu na Imię pole jest przedstawione poniżej;

Nazwa pola Typ danych Rozmiar na dysku
firstName Char (50) 50 bajtów
(rekord wskaźnik) Specjalne 4 bajty

Uwaga: Wskaźniki w MySQL mają długość 2, 3, 4 lub 5 bajtów w zależności od wielkości tabeli.

Przykład 2  - indeksowanie

Biorąc pod uwagę naszą przykładową bazę danych r = 5,000,000 rekordy o długości rekordu indeksu wynoszącej R = 54 bajtów i użycie domyślnego rozmiaru bloku B = 1,024 bajty. Czynnikiem blokującym indeks byłby bfr = (B/R) = 1024/54 = 18 zapisy na blok dysku. Łączna liczba bloków wymaganych do przechowywania indeksu N = (r/bfr) = 5000000/18 = 277,778 Bloki.

Teraz wyszukiwanie przy użyciu Imię pole może wykorzystać indeks w celu zwiększenia wydajności. Pozwala to na binarne przeszukiwanie indeksu ze średnią log2 277778 = 18.08 = 19 blokuj dostęp. Aby znaleźć adres faktycznego rekordu, który wymaga dalszego dostępu do bloku, aby przeczytać, przynosząc sumę do 19 + 1 = 20 blokuje dostęp, daleko od dostępu do 1 000 000 bloków wymaganych do znalezienia Imię dopasować w nieindeksowanej tabeli.

Kiedy należy go użyć?

Biorąc pod uwagę, że tworzenie indeksu wymaga dodatkowej przestrzeni dyskowej (277,778 bloków dodatkowych z powyższego przykładu, wzrost o ~ 28%), a zbyt wiele indeksów może powodować problemy wynikające z ograniczeń wielkości systemów plików, należy uważnie zastanowić się, aby wybrać poprawne pola do indeksowania.

Ponieważ indeksy służą jedynie do przyspieszenia wyszukiwania pasującego pola w rekordach, oczywiste jest, że pola indeksowania używane tylko dla danych wyjściowych byłyby po prostu marnowaniem miejsca na dysku i czasem przetwarzania podczas operacji wstawiania lub usuwania, a zatem należy unikać. Biorąc pod uwagę charakter wyszukiwania binarnego, liczebność lub niepowtarzalność danych jest ważna. Indeksowanie na polu o liczności 2 spowodowałoby podzielenie danych na pół, podczas gdy liczność 1000 zwróciłaby około 1000 rekordów. Przy tak małej liczności efektywność jest zredukowana do sortowania liniowego, a optymalizator zapytań uniknie użycia indeksu, jeśli liczność jest mniejsza niż 30% rekordowej liczby, skutecznie powodując, że indeks jest marnowany na przestrzeń.


2852
2017-08-04 10:41



wyszukiwanie binarne może być wykonane, gdy dane są unikatowe, czy mam rację? chociaż wspomniałeś, że minimalna liczność jest ważna, algorytm nie byłby prostym wyszukiwaniem binarnym, w jaki sposób to przybliżenie (~ log2 n) wpłynęłoby na czas procesu? - shampoo
@AbhishekShivkumar: świetne pytanie! Myślę, że tabela indeksu będzie miała tyle wierszy, ile jest w tabeli danych. A ponieważ to pole będzie miało tylko 2 wartości (boolean z prawdą / fałszem) i mówi, że chcesz mieć rekord z wartością true, wtedy możesz tylko o połowę zmniejszyć wynik w pierwszym przebiegu, w drugim przebiegu wszystkie twoje rekordy mają wartość true, więc istnieje nie ma podstaw do rozróżnienia, teraz musisz przeszukiwać tabelę danych w sposób liniowy - dlatego powiedział, że liczność powinna być brana pod uwagę przy podejmowaniu decyzji o indeksowanej kolumnie. W takim przypadku bezwartościowe jest indeksowanie takiej kolumny. Mam nadzieję, że mam rację :) - Saurabh Patil
nie powinna być liczbą dostępnych bloków w przeciętnym przypadku (N+1)/2. Jeśli zsumujemy liczbę dostępów do bloków dla wszystkich możliwych przypadków i podzielimy je przez liczbę przypadków, to mamy N*(N+1)/(2*n) który wychodzi (N+1)/2. - ajay
Myślę, że jest kilka literówek w tej odpowiedzi, na przykład w zdaniu: "daleko od 277,778 bloków dostępu wymaganych przez nieindeksowany stół". czy autor nie oznacza 1 000 000 dostępu do bloku? 277 778 to liczba bloków wymaganych przez sam indeks. Wydaje się, że jest kilka innych niedokładności :( - jcm
@jcm Wyjaśnił to w "Co to jest sekcja indeksowania" - "Indeksowanie jest sposobem na sortowanie wielu rekordów na wielu polach. Tworzenie indeksu na polu w tabeli tworzy kolejną strukturę danych, która przechowuje wartość pola i wskaźnik do rekordu, do którego się odnosi. Struktura indeksu jest następnie sortowana, umożliwiając wykonanie na niej binarnych wyszukiwań. " - grinch


Po raz pierwszy przeczytałem to bardzo mi pomogło. Dziękuję Ci.

Od tego czasu zyskałem trochę wiedzy na temat wad tworzenia indeksów: jeśli piszesz do tabeli (UPDATE lub INSERT) z jednym indeksem, masz faktycznie dwie operacje zapisu w systemie plików. Jeden dla danych tabeli i drugi dla danych indeksu (i jego uciekania się (i - w przypadku klastrów - do wykorzystania danych z tabeli)). Jeśli tabela i indeks znajdują się na tym samym dysku twardym, to kosztuje to więcej czasu. Zatem tabela bez indeksu (sterty), pozwoliłaby na szybsze operacje zapisu. (gdybyś miał dwa indeksy, skończyłbyś z trzema operacjami zapisu i tak dalej)

Jednak zdefiniowanie dwóch różnych lokalizacji na dwóch różnych dyskach twardych dla danych indeksowych i danych tabeli może zmniejszyć / wyeliminować problem zwiększonego kosztu czasu. Wymaga to zdefiniowania dodatkowych grup plików z odpowiednimi plikami na pożądanych dyskach twardych i zdefiniowania położenia tabeli / indeksu według potrzeb.

Innym problemem z indeksami jest ich fragmentacja w miarę wprowadzania danych. REORGANIZE pomaga, musisz napisać procedury, aby to zrobić.

W niektórych scenariuszach sterty są bardziej przydatne niż tabela z indeksami,

np .: - Jeśli masz dużo rywalizacji, ale tylko jeden nocny odczyt poza godzinami pracy do zgłoszenia.

Również rozróżnienie między indeksami klastrowymi i nieklastrowymi jest dość ważne.

Pomogło mi:- Co właściwie oznacza indeks klastrowy i nieklastrowy?


176
2018-04-30 14:31



Sądzę, że te problemy z indeksowaniem można rozwiązać, utrzymując dwie różne bazy danych, podobnie jak Master i Slave. Gdzie można użyć Master do wstawiania lub aktualizacji rekordów. Bez indeksowania. I niewolnik może być używany do czytania z odpowiednim prawem indeksowania ??? - bharatesh
nie, źle, przepraszam. nie tylko zawartość tabel musi zostać zaktualizowana, ale także struktura i zawartość indeksu (b-drzewo, węzły). twoja koncepcja mistrza i niewolnika tu nie ma sensu. To, co może być wykonalne, to replikowanie lub tworzenie kopii lustrzanej do drugiej bazy danych, w której przeprowadzane są analizy w celu usunięcia obciążenia z pierwszej bazy danych. ta druga baza danych zawierałaby kopie danych i indeksy tych danych. - Der U
Ya ...! Spróbuj przeczytać mój komentarz i zrozum go poprawnie. Powiedziałem to samo, odniosłem się do mistrza i niewolnika (cokolwiek) jako "eplicowanie lub tworzenie kopii lustrzanej do drugiej bazy danych, w której odbywają się analizy w celu usunięcia obciążenia z pierwszej bazy danych, ta druga baza danych zawierałaby kopie danych i indeksów. te dane " - bharatesh
druga baza danych - do której wykonuje się dublowanie lub replikowanie, niewolnik - doświadczałaby całej manipulacji danymi jak pierwsza. przy każdej operacji dml indeksy tej drugiej bazy danych mogą napotkać "te problemy z indeksowaniem". Nie widzę w tym korzyści, gdziekolwiek potrzebne są indeksy i zbudowane do szybkiej analizy, które muszą być aktualizowane. - Der U


Indeks jest po prostu strukturą danych, która powoduje, że wyszukiwanie jest szybsze dla określonej kolumny w bazie danych. Ta struktura jest zwykle b-drzewem lub tablicą asocjacyjną, ale może być dowolną inną strukturą logiczną.

Aby uzyskać więcej informacji, polecam: Jak działają indeksy baz danych? A jak pomagają indeksy?


131
2018-02-20 14:40



+1 razy milion za tę odpowiedź, ponieważ znalazłem tę listę, próbując znaleźć proste wyjaśnienie, czym właściwie jest indeksowanie. - Josh Burson


Załóżmy teraz, że chcemy uruchomić zapytanie, aby znaleźć wszystkie szczegóły pracowników o nazwie "Abc".

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

Co by się stało bez indeksu?

Oprogramowanie bazy danych musiałoby dosłownie spojrzeć na każdy wiersz tabeli Employee, aby sprawdzić, czy nazwa Employee_Name dla tego wiersza to "Abc". A ponieważ chcemy mieć w sobie każdy wiersz z nazwą "Abc", nie możemy przestać patrzeć, gdy znajdziemy tylko jeden wiersz o nazwie "Abc", ponieważ mogą istnieć inne wiersze z nazwą ABC. Zatem każdy wiersz do ostatniego wiersza musi być przeszukany - co oznacza, że ​​tysiące wierszy w tym scenariuszu będzie musiało zostać przebadanych przez bazę danych, aby znaleźć wiersze o nazwie "Abc". To się nazywa a pełne skanowanie tabeli

W jaki sposób indeks bazy danych może pomóc w osiągnięciu wydajności

Cały sens posiadania indeksu polega na przyspieszeniu wyszukiwań poprzez zasadniczo zmniejszenie liczby rekordów / wierszy w tabeli, które należy zbadać. Indeks jest strukturą danych (najczęściej B-drzewa), która przechowuje wartości dla konkretnej kolumny w tabeli.

Jak działa indeks B-drzew?

Powodem, dla którego B-drzewa są najbardziej popularną strukturą danych dla indeksów, jest fakt, że są one efektywne czasowo - ponieważ wyszukiwanie, usuwanie i wstawianie może być wykonane w logarytmicznym czasie. Innym ważnym powodem, dla którego B-drzewa są częściej używane, jest fakt, że dane przechowywane w drzewie B mogą być sortowane. RDBMS zazwyczaj określa, która struktura danych jest faktycznie używana dla indeksu. Ale w niektórych scenariuszach z pewnymi RDBMS, możesz faktycznie określić, jakiej struktury danych chcesz użyć swojej bazy danych podczas tworzenia samego indeksu.

Jak działa indeks tabeli mieszania?

Powodem są używane indeksy mieszania, ponieważ tabele mieszające są niezwykle wydajne, jeśli chodzi o wyszukiwanie wartości. Tak więc kwerendy, które porównują dla równości łańcuch, mogą bardzo szybko pobierać wartości, jeśli używają indeksu mieszającego.

Na przykład zapytanie, które omówiliśmy wcześniej, może skorzystać z indeksu hash utworzonego w kolumnie Employee_Name. Sposób działania indeksu skrótu jest taki, że wartość kolumny będzie kluczem do tabeli mieszania, a faktyczna wartość odwzorowana na ten klucz będzie po prostu wskaźnikiem do danych wiersza w tabeli. Ponieważ tablica asocjacyjna jest w zasadzie tablicą asocjacyjną, typowa pozycja wyglądałaby jak "Abc => 0x28939", gdzie 0x28939 jest odniesieniem do wiersza tabeli, gdzie Abc jest przechowywany w pamięci. Szukanie wartości takiej jak "Abc" w indeksie tablicy mieszającej i uzyskiwanie odniesienia do wiersza w pamięci jest oczywiście dużo szybsze niż skanowanie tabeli, aby znaleźć wszystkie wiersze z wartością "Abc" w kolumnie Employee_Name.

Wady indeksu skrótu

Tabele skrótu nie są uporządkowanymi strukturami danych i istnieje wiele typów zapytań, których indeksów mieszania nawet nie można pomóc. Na przykład załóżmy, że chcesz dowiedzieć się wszystkich pracowników, którzy mają mniej niż 40 lat. Jak można to zrobić za pomocą indeksu tabeli mieszania? Cóż, nie jest to możliwe, ponieważ tabela mieszająca jest przydatna tylko do wyszukiwania par wartości klucza - co oznacza zapytania sprawdzające równość

Co dokładnie znajduje się w indeksie bazy danych? Więc teraz wiesz, że indeks bazy danych jest tworzony w kolumnie w tabeli i że indeks przechowuje wartości w tej konkretnej kolumnie. Ważne jest jednak zrozumienie, że indeks bazy danych nie przechowuje wartości w innych kolumnach tej samej tabeli. Na przykład, jeśli utworzymy indeks w kolumnie Employee_Name, oznacza to, że wartości kolumny Employee_Age i Employee_Address nie są również przechowywane w indeksie. Gdybyśmy po prostu przechowywali wszystkie pozostałe kolumny w indeksie, byłoby to zupełnie jak utworzenie kolejnej kopii całej tabeli - co zajęłoby zbyt dużo miejsca i byłoby bardzo nieefektywne.

W jaki sposób baza danych wie, kiedy użyć indeksu? Po uruchomieniu zapytania typu "SELECT * FROM Employee WHERE Employee_Name =" Abc "" baza danych sprawdzi, czy istnieje indeks dla zapytanych kolumn. Zakładając, że kolumna Employee_Name ma utworzony indeks, baza danych będzie musiała zdecydować, czy ma sens użycie indeksu do znalezienia przeszukiwanych wartości - ponieważ istnieją pewne scenariusze, w których faktycznie mniej wydajne jest korzystanie z indeksu bazy danych i bardziej wydajne, aby skanować całą tabelę.

Jaki jest koszt posiadania indeksu bazy danych?

Zajmuje to miejsce - a im większy stół, tym większy indeks. Innym hitem wydajności z indeksami jest fakt, że za każdym razem, gdy dodasz, usuniesz lub zaktualizujesz wiersze w odpowiedniej tabeli, te same operacje będą musiały zostać wykonane w indeksie. Pamiętaj, że indeks musi zawierać te same dane co minutę, niezależnie od tego, co znajduje się w kolumnie (tabelach) tabeli, którą indeks obejmuje.

Zasadą jest, że indeks powinien być tworzony tylko w tabeli, jeśli dane w indeksowanej kolumnie będą często wyszukiwane.

Zobacz też

  1. Jakie kolumny generalnie tworzą dobre indeksy?
  2. Jak działają indeksy baz danych

94
2017-08-13 18:36



"indeks bazy danych nie przechowuje wartości w innych kolumnach" - nie jest to prawda. - mustaccio
@mustaccio: Index przechowuje odniesienie do wiersza tylko z indeksowanymi kolumnami (o ile wiem). Mogę się mylić. Czy masz jakieś odniesienie, które mówi, że indeks przechowuje inne wartości kolumn? - Somnath Muluk
@ Do Downvoters: Czy możesz wyjaśnić, co jest nie tak, aby poprawić? - Somnath Muluk
Sprawdź na przykład indeksy klastrowania SQL Server lub DB2 CREATE INDEX ... INCLUDE klauzula. W mojej opinii masz zbyt wiele uogólnień w swojej odpowiedzi. - mustaccio
@mustaccio: Tak domyślnie create index nie zawiera innych kolumn i dlaczego powinien. If we did just store all the other columns in the index, then it would be just like creating another copy of the entire table, which would take up way too much space and would be very inefficient.. To jest bardziej uogólniona wersja indeksów. CREATE INDEX ... INCLUDE jest nowszą wersją, biorąc pod uwagę inne kolumny. Post, który wyjaśniłem, rozważa bardziej uogólnioną wersję. Jak działają indeksy, to jedna książka, jeśli weźmiemy pod uwagę wszystkie bazy danych? Czyż nie? Czy uważasz, że odpowiedź zasługuje na awans? - Somnath Muluk


Klasyczny przykład "Indeksuj w książkach"

Rozważmy "Książkę" składającą się z 1000 stron, podzieloną na 100 sekcji, z których każda zawiera strony X.

Proste, co?

Teraz, bez strony indeksu, aby znaleźć konkretną sekcję zaczynającą się od litery "S", nie masz innej opcji niż skanowanie całej książki. tj .: 1000 stron

Ale z początkową stroną indeksu, jesteś tam. Co więcej, aby przeczytać jakąś konkretną sekcję, która ma znaczenie, wystarczy za każdym razem przeglądać stronę indeksu. Po znalezieniu pasującego indeksu można skutecznie przejść do sekcji, pomijając inne sekcje.

Oprócz tego, oprócz 1000 stron, do wyświetlenia strony indeksu potrzeba kolejnych ~ 10 stron, a więc 1010 stron.

Dlatego indeks jest osobną sekcją, która przechowuje wartości indeksowanej kolumny + wskaźnika do indeksowanego wiersza w posortowanej kolejności dla efektywnego wyszukiwania.

W szkołach wszystko jest proste, prawda? : P


86
2018-04-23 14:43



naprawdę fajna analogia! Zabawne, że nie nawiązałem połączenia między indeksem książki a indeksem db - Yolo Voe
Dobre wytłumaczenie dla szybkiego zrozumienia: D - ndh103


Prosty opis !!!!!!!!!!

Indeks jest tylko strukturą danych przechowującą wartości dla konkretnej kolumny w tabeli. Indeks jest tworzony w kolumnie tabeli.

Przykład: mamy tabelę bazy danych o nazwie Użytkownik z trzema kolumnami - Nazwa, Wiek i Adres. Załóżmy, że tabela użytkownika ma tysiące wierszy.

Teraz załóżmy, że chcemy uruchomić zapytanie, aby znaleźć wszystkie szczegóły każdego użytkownika o nazwie "John". Jeśli uruchomimy następujące zapytanie.

SELECT * FROM User 
WHERE Name = 'John'

Oprogramowanie bazy danych musiałoby dosłownie spojrzeć na każdy wiersz w tabeli użytkownika, aby sprawdzić, czy nazwa tego wiersza to "John". To zajmie dużo czasu.
W tym miejscu indeks pomaga nam "indeksowanie służy do przyspieszenia wyszukiwanych haseł, zasadniczo zmniejszając liczbę rekordów / wierszy w tabeli, która musi być zbadana".
Jak utworzyć indeks

CREATE INDEX name_index
ON User (Name)

Indeks składa się z wartości kolumn (np .: John) z jednej tabeli i te wartości są przechowywane w strukturze danych.
Teraz baza danych użyje indeksu do znalezienia pracowników o imieniu John, ponieważ indeks będzie prawdopodobnie posortowany alfabetycznie według nazwy użytkownika. A ponieważ jest posortowana, oznacza to, że wyszukiwanie nazwy jest o wiele szybsze, ponieważ wszystkie nazwy zaczynające się od litery "J" będą znajdować się obok siebie w indeksie!


47
2017-08-02 01:30





Szybka sugestia. Ponieważ indeksowanie kosztuje dodatkowe zapisy i przestrzeń dyskową, więc jeśli twoja aplikacja wymaga więcej operacji wstawiania / aktualizacji, możesz chcieć używać tabel bez indeksów, ale jeśli wymaga to więcej operacji pobierania danych, powinieneś iść do indeksowania stół.


21
2018-01-14 06:44



To jest komentarz, a nie odpowiedź. - RonJohn


Po prostu pomyśl o indeksie bazy danych jako indeksie książki.  Jeśli masz książkę o psach i chcesz znaleźć informacje na temat powiedzmy owczarków niemieckich, możesz oczywiście przejrzeć wszystkie strony książki i znaleźć to, czego szukasz, ale to oczywiście jest czasochłonne i niezbyt szybki. Inną opcją jest to, że możesz po prostu przejść do sekcji Indeksu książki, a następnie znaleźć to, czego szukasz, używając nazwy podmiotu, którego szukasz (w tym przypadku Owczarki niemieckie), a także patrząc na numer strony do szybko znajdź to, czego szukasz. W bazie danych numer strony jest nazywany wskaźnikiem, który kieruje bazę danych do adresu na dysku, na którym znajduje się jednostka. Używając tej samej analogii owczarka niemieckiego, moglibyśmy mieć coś takiego ("Owczarek niemiecki", 0x77129), gdzie 0x77129 to adres na dysku, na którym przechowywane są dane wiersza dla Owczarka niemieckiego.

W skrócie, indeks to struktura danych przechowująca wartości dla konkretnej kolumny w tabeli, aby przyspieszyć wyszukiwanie zapytań.


16
2017-12-21 17:16