Czym jest indeks w SQL?

Co to jest indeks w SQL? Czy możesz wyjaśnić lub odwołać się do jasnego zrozumienia?

Gdzie powinienem użyć indeksu?

 319
Author: Dorian, 2010-06-02

11 answers

Indeks jest używany do przyspieszenia wyszukiwania w bazie danych. MySQL mają dobrą dokumentację na ten temat (co jest istotne również dla innych serwerów SQL): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

Indeks może być używany do efektywnego wyszukiwania wszystkich wierszy pasujących do jakiejś kolumny w zapytaniu, a następnie przejść tylko przez ten podzbiór tabeli, aby znaleźć dokładne dopasowania. Jeśli nie masz indeksów w żadnej kolumnie w klauzuli WHERE, Serwer SQL musi przejść przez całą tabelę i sprawdź każdy wiersz, aby sprawdzić, czy pasuje, co może być powolną operacją na dużych stołach.

Indeks może być również indeksem UNIQUE, co oznacza, że nie można mieć zduplikowanych wartości w tej kolumnie lub PRIMARY KEY, który w niektórych silnikach pamięci określa, gdzie w pliku bazy danych jest przechowywana wartość.

W MySQL możesz użyć EXPLAIN przed instrukcją SELECT, aby sprawdzić, czy Twoje zapytanie użyje jakiegokolwiek indeksu. To dobry początek rozwiązywania problemów problemy z wydajnością. Czytaj więcej tutaj: http://dev.mysql.com/doc/refman/5.0/en/explain.html

 277
Author: Emil Vikström,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-05 06:00:44

Klastrowy indeks jest jak zawartość książki telefonicznej. Możesz otworzyć książkę w "Hilditch, David" i znaleźć wszystkie informacje na temat wszystkich "Hilditch' S tuż obok siebie. Tutaj kluczami dla klastrowego indeksu są (lastname, firstname).

To sprawia, że indeksy klastrowe są świetne do pobierania wielu danych w oparciu o zapytania oparte na zakresie, ponieważ wszystkie dane znajdują się obok siebie.

Ponieważ klastrowy indeks jest rzeczywiście związany z tym, jak dane są przechowywane, jest tylko jeden z nich jest możliwy w tabeli (chociaż możesz oszukiwać, aby symulować wiele klastrowych indeksów).

Indeks nieklastrowany różni się tym, że można mieć ich wiele, a następnie wskazywać na dane w indeksie klastrowym. Możesz mieć np. nieklastrowany Indeks z tyłu książki telefonicznej, który jest kluczowany (miasto, Adres)

Wyobraź sobie, że musisz przeszukać książkę telefoniczną dla wszystkich ludzi, którzy mieszkają w "Londynie" - tylko z zbiorczym indeksem będziesz musiał przeszukuj każdą pozycję w książce telefonicznej, ponieważ klucz na indeksie klastrowym jest włączony (lastname, firstname), w wyniku czego ludzie mieszkający w Londynie są losowo rozrzucani po indeksie.

Jeśli masz nie-klastrowy indeks na (town), zapytania te mogą być wykonywane znacznie szybciej.

Mam nadzieję, że to pomoże!

 131
Author: Dave Hilditch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-01 13:44:44

Bardzo dobrą analogią jest myślenie o indeksie bazy danych jako indeksie w książce. Jeśli masz książkę dotyczącą krajów i szukasz Indii, to dlaczego przeglądasz całą książkę – która jest odpowiednikiem pełnego skanu tabeli w terminologii baz danych-skoro możesz po prostu przejść do indeksu z tyłu książki, który powie Ci dokładne strony, na których możesz znaleźć informacje na temat Indii. Podobnie jak indeks książki zawiera numer strony, indeks bazy danych zawiera wskaźnik do wiersz zawierający wartość, której szukasz w SQL.

Więcej Tutaj

 112
Author: Arun Kumar M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-18 17:42:38

Indeks jest używany do przyspieszenia wydajności zapytań. Robi to poprzez zmniejszenie liczby stron danych bazy danych, które mają być odwiedzane/skanowane.

W SQL Server, clustered index określa fizyczną kolejność danych w tabeli. W tabeli może być tylko jeden indeks klastrowy (indeks klastrowy jest tabelą). Wszystkie inne indeksy w tabeli są określane jako nieklasowane.

 72
Author: Mitch Wheat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-15 00:50:29

Indeksy polegają na szybkim wyszukiwaniu danych. Indeksy w bazie danych są analogiczne do indeksów, które można znaleźć w książce. Jeśli książka ma indeks, A proszę Cię o znalezienie rozdziału w tej książce, możesz szybko go znaleźć za pomocą indeksu. Z drugiej strony, jeśli książka nie ma indeksu, będziesz musiał poświęcić więcej czasu na szukanie rozdziału, przeglądając każdą stronę Od początku do końca książki. W podobny sposób, indeksy w bazie danych, mogą pomóc w zapytaniach do znajdź dane szybko. Jeśli jesteś nowy w indeksach, poniższe filmy mogą być bardzo przydatne. Wiele się od nich nauczyłem.

Podstawy indeksów
indeksy Clustered i Non-Clustered
unikalne i niepowtarzalne indeksy
zalety i wady indeksów

 36
Author: Suresh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-25 12:39:29

W ogólnym indeksie jest B-tree. Istnieją dwa rodzaje indeksów: clustered i nonclustered.

Clustered index tworzy fizyczną kolejność wierszy (może to być tylko jeden i w większości przypadków jest to również klucz podstawowy - jeśli utworzysz klucz podstawowy na tabeli, utworzysz indeks klastrowy również na tej tabeli).

Nonclustered indeks jest również drzewem binarnym, ale nie tworzy fizycznej kolejności wierszy. Czyli węzły liścia indeksu niezakłóconego zawierają PK (jeśli istnieje) lub indeks wiersza.

Indeksy są używane do zwiększenia szybkości wyszukiwania. Ponieważ złożoność jest O (log N). Indeksy to bardzo duży i ciekawy temat. Mogę powiedzieć, że tworzenie indeksów na dużych bazach danych to czasami jakaś Sztuka.

 18
Author: Voice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 18:45:41

INDEXES - aby łatwo znaleźć DANE

UNIQUE INDEX - zduplikowane wartości nie są dozwolone

Składnia dla INDEX

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

Składnia dla UNIQUE INDEX

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
 14
Author: RAGU,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 21:41:18

INDEX jest techniką optymalizacji wydajności, która przyspiesza proces pobierania danych. Jest to trwała struktura danych powiązana z tabelą (lub widokiem) w celu zwiększenia wydajności podczas pobierania danych z tej tabeli (lub widoku).

Wyszukiwanie oparte na indeksie jest stosowane bardziej szczególnie, gdy zapytania Zawierają filtr WHERE. W przeciwnym razie, tj. zapytanie bez WHERE-filter wybiera całe Dane i proces. Przeszukiwanie całej tabeli bez indeksu jest wywoływane Skanowanie tabeli.

Znajdziesz dokładne informacje dla indeksów Sql w przejrzysty i wiarygodny sposób: wykonaj następujące linki:

  1. dla cocnept-mądrego zrozumienia: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimizations.html
  2. dla zrozumienia implementacji: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html
 9
Author: nayeemDotNetAuthorities,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-01 15:17:49

Jeśli używasz SQL Server, jednym z najlepszych zasobów jest własne książki Online, które pochodzi z instalacji! Jest to 1 miejsce, do którego odnosiłbym się w przypadku wszelkich tematów związanych z SQL Server.

Jeśli to praktyczne "jak mam to zrobić?"rodzaj pytań, to StackOverflow byłoby lepszym miejscem do zadawania.

Poza tym dawno mnie nie było, ale sqlservercentral.com kiedyś była jedną z najlepszych stron związanych z SQL Server.

 5
Author: cloneofsnake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-02 06:34:34

Indeks jest używany z kilku różnych powodów. Głównym powodem jest przyspieszenie zapytań, dzięki czemu można szybciej pobierać wiersze lub sortować wiersze. Innym powodem jest zdefiniowanie klucza podstawowego lub unikalnego indeksu, który zagwarantuje, że żadne inne kolumny nie będą miały takich samych wartości.

 4
Author: Senseful,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-02 06:29:00

Najpierw musimy zrozumieć, jak działa normalne (bez indeksowania) zapytanie. Zasadniczo przemierza każdy wiersz jeden po drugim, a gdy znajdzie dane, które zwraca. Zapoznaj się z poniższym obrazkiem. (To zdjęcie pochodzi z tego wideo .)

Bez indeksowania Przypuśćmy więc, że zapytanie ma znaleźć 50, będzie musiało odczytać 49 rekordów jako wyszukiwanie liniowe.

Patrz poniższy obrazek. (To zdjęcie pochodzi z tego wideo )

Tutaj wpisz opis obrazka

Kiedy zastosuj indeksowanie, zapytanie szybko znajdzie dane bez czytania każdego z nich, eliminując połowę danych w każdym przejściu, jak wyszukiwanie binarne. Indeksy mysql są przechowywane jako B-tree, gdzie wszystkie dane są w leaf node.

 0
Author: Kravi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 20:15:48