Creative Saplings

SQLShack (Polski)

22 lutego, 2021
No Comments

Indeksy służą do przyspieszenia procesu zapytań w SQL Server, co skutkuje wysokim wydajność. Są podobne do indeksów podręczników. W podręcznikach, jeśli chcesz przejść do konkretnego rozdziału, przechodzisz do indeksu, znajdujesz numer strony rozdziału i przechodzisz bezpośrednio do tej strony. Bez indeksów proces znajdowania żądanego rozdziału byłby bardzo powolny.

To samo dotyczy indeksów w bazach danych. Bez indeksów DBMS musi przejrzeć wszystkie rekordy w tabeli, aby pobrać żądane wyniki. Ten proces nazywa się skanowaniem tabel i jest niezwykle powolny. Z drugiej strony, jeśli utworzysz indeksy, baza danych najpierw przechodzi do tego indeksu, a następnie bezpośrednio pobiera odpowiednie rekordy tabeli.

Istnieją dwa typy indeksów w SQL Server:

  1. Indeks klastrowy
  2. Indeks nieklastrowy

Indeks klastrowy

Indeks klastrowy definiuje kolejność, w jakiej dane są fizycznie przechowywane w tabeli. Dane tabeli można sortować tylko w sposób, dlatego w każdej tabeli może istnieć tylko jeden indeks klastrowy. W SQL Server ograniczenie klucza podstawowego automatycznie tworzy indeks klastrowy w tej konkretnej kolumnie.

Przyjrzyjmy się temu. Najpierw utwórz tabelę „uczniów” w „schooldb”, wykonując następujący skrypt, lub upewnij się, że Twoja baza danych jest w pełni zarchiwizowana, jeśli używasz danych na żywo:

1
2
3
4
5
6
7
8
9
10
11
12
13

UTWÓRZ BAZĘ DANYCH schooldb
CREATE TABLE student
(
id INT PRIMARY KEY,
name VARCHAR (50) NOT NULL,
płeć VARCHAR (50) NOT NULL,
DOB datetime NOT NULL,
total_score INT NOT NULL,
city VARCHAR (50) NOT NULL
)

Uwaga tutaj w tabeli „ucznia” ustawiliśmy prima ry ograniczenie klucza w kolumnie „id”. Spowoduje to automatyczne utworzenie klastrowanego indeksu w kolumnie „id”. Aby wyświetlić wszystkie indeksy w określonej tabeli, wykonaj procedurę składowaną „sp_helpindex”. Ta procedura składowana akceptuje nazwę tabeli jako parametr i pobiera wszystkie indeksy tabeli. Następujące zapytanie pobiera indeksy utworzone w tabeli ucznia.

1
2
3
4
5

UŻYJ schooldb
EXECUTE sp_helpindex student

Powyższe zapytanie zwróci następujący wynik:

nazwa_indeksu index_description index_keys
PK__student__3213E83F7F60ED59 klastrowy, unikalny klucz podstawowy zlokalizowany na PRIMARY id

W wynikach widać tylko jeden indeks. To jest indeks, który został utworzony automatycznie z powodu ograniczenia klucza podstawowego w kolumnie „id”.

Ten indeks klastrowy przechowuje rekord w tabeli uczniów w porządku rosnącym „id”. Dlatego jeśli wstawiony rekord ma identyfikator równy 5, rekord zostanie wstawiony w piątym wierszu tabeli zamiast w pierwszym wierszu. Podobnie, jeśli czwarty rekord ma identyfikator 3, zostanie wstawiony do trzeciego wiersza zamiast czwartego. Dzieje się tak, ponieważ indeks klastrowy musi utrzymywać fizyczną kolejność przechowywanych rekordów zgodnie z indeksowaną kolumną, tj. Id. Aby zobaczyć tę kolejność w akcji, wykonaj następujący skrypt:

Powyższy skrypt wstawia dziesięć rekordów do tabeli uczniów. Zwróć uwagę, że rekordy są wstawiane w losowej kolejności wartości w kolumnie „id”, ale ze względu na domyślny indeks grupowany w kolumnie id rekordy są fizycznie przechowywane w kolejności rosnącej wartości w kolumnie „id”. Wykonaj następującą instrukcję SELECT, aby pobrać rekordy z tabeli uczniów.

1
2
3
4
5

UŻYJ schooldb
SELECT * FROM student

Rekordy zostaną pobrane w następującej kolejności:

Tworzenie niestandardowego indeksu klastrowego

Możesz utworzyć własny indeks niestandardowy, a także domyślny indeks klastrowany. Aby utworzyć nowy indeks klastrowy w tabeli, musisz najpierw usunąć poprzedni indeks.

Aby usunąć indeks, przejdź do „Object Explorer- > Databases- > Database_Name- > Tabele- > Nazwa_tabeli – > Indeksy”. Kliknij prawym przyciskiem myszy indeks, który chcesz usunąć, i wybierz USUŃ . Zobacz poniższy zrzut ekranu.

Teraz aby utworzyć nowy indeks klastrowy, wykonaj następujący skrypt:

1
2
3
4
5
6

użyj schooldb
UTWÓRZ INDEKS KLUSTEROWANY IX_tblStudent_Gender_Score
ON student (płeć ASC, total_score DESC)

Proces tworzenia Tworzenie indeksu klastrowego jest podobne do normalnego indeksu z jednym wyjątkiem. W przypadku indeksu klastrowego należy użyć słowa kluczowego „CLUSTERED” przed „INDEX”.

Powyższy skrypt tworzy indeks klastrowy o nazwie „IX_tblStudent_Gender_Score” w tabeli uczniów. Indeks ten jest tworzony w kolumnach „gender” i „total_score”. Indeks utworzony w więcej niż jednej kolumnie nosi nazwę „indeks złożony”.

Powyższy indeks najpierw sortuje wszystkie rekordy w kolejności rosnącej według płci. Jeśli płeć jest taka sama dla dwóch lub więcej rekordów, rekordy są sortowane w kolejności malejącej wartości w kolumnie „total_score”. Możesz również utworzyć indeks klastrowany w jednej kolumnie. Teraz, jeśli wybierzesz wszystkie rekordy z student tabeli, zostaną pobrane w następującej kolejności:

Indeksy nieklastrowe

Indeks nieklastrowy nie sortuje fizycznych danych wewnątrz tabeli. indeks nieklastrowy jest przechowywany w jednym miejscu, a dane tabeli w innym miejscu. Jest to podobne do podręcznika, w którym zawartość książki znajduje się w jednym miejscu, a indeks w innym. Pozwala to na więcej niż jeden nieklastrowy indeks na tabelę.

Należy tutaj wspomnieć, że w tabeli dane będą sortowane według indeksu klastrowego. Jednak wewnątrz indeksu nieklastrowego dane są przechowywane w określonej kolejności. Indeks zawiera wartości kolumn, na podstawie których tworzony jest indeks, oraz adres rekordu, do którego należy wartość kolumny.

Gdy zapytanie skierowane jest do kolumny, dla której utworzono indeks, baza danych najpierw przejdzie do indeksu i wyszuka adres odpowiedniego wiersza w tabeli. Następnie przejdzie do tego adresu wiersza i pobierze inne wartości kolumn. To z powodu tego dodatkowego kroku indeksy nieklastrowe są wolniejsze niż indeksy klastrowe.

Tworzenie indeksu nieklastrowego

Składnia tworzenia indeksu nieklastrowego jest podobna do indeks klastrowy. Jednak w przypadku indeksu nieklastrowanego słowo kluczowe „NONCLUSTERED” jest używane zamiast „CLUSTERED”. Spójrz na poniższy skrypt.

1
2
3
4
5
6

użyj schooldb
UTWÓRZ INDEKS NONCLUSTERED IX_tblStudent_Name
ON student (imię ASC)

Powyższy skrypt tworzy nieklastrowany indeks w kolumnie „nazwa” tabeli uczniów. Indeks jest sortowany według nazwy w porządku rosnącym. Jak powiedzieliśmy wcześniej, dane tabeli i indeks będą przechowywane w różnych miejscach. Rekordy tabeli zostaną posortowane według indeksu klastrowego, jeśli taki istnieje. Indeks zostanie posortowany zgodnie z jego definicją i będzie przechowywany oddzielnie ze stołu.

Dane tabeli uczniów:

IX_tblStudent_Name Dane indeksu

name Row Address
Alan Wiersz Adres
Elis Row Address
Jolly Row Address
Jon Row Address
Joseph Row Address
Kate Row Address
Laura Row Address
Myszy Adres wiersza
Sara Adres wiersza
Wise Row Address

Uwaga , tutaj w indeksie każdy wiersz ma kolumnę, która przechowuje adres wiersza, do którego należy nazwa. Więc jeśli zostanie wysłane zapytanie w celu pobrania płci i daty urodzenia ucznia o imieniu „Jon”, baza danych najpierw przeszuka imię „Jon” w indeksie. Następnie odczyta adres wiersza „Jon” i przejdzie bezpośrednio do tego wiersza w tabeli „uczeń”, aby pobrać płeć i datę urodzenia Jona.

Wniosek

Z dyskusji znajdujemy następujące różnice między indeksami klastrowymi i nieklastrowymi.

  1. W tabeli może być tylko jeden indeks klastrowy. Można jednak utworzyć wiele indeksów nieklastrowych w jednej tabeli.
  2. Klastrowane indeksy służą tylko do sortowania tabel. Dlatego nie zajmują dodatkowego miejsca do przechowywania. Indeksy nieklastrowe są przechowywane w innym miejscu niż rzeczywista tabela, która zajmuje więcej miejsca.
  3. Indeksy klastrowe są szybsze niż indeksy nieklastrowe, ponieważ nie wymagają żadnego dodatkowego kroku wyszukiwania.

Inne świetne artykuły Bena

Różnica między tożsamością & Sekwencja w SQL Server

Jaka jest różnica między indeksami klastrowymi i nieklastrowanymi w SQL Server?

  • Autor
  • Najnowsze posty
Ben Richardson prowadzi Acuity Training, wiodącego dostawcę szkoleń SQL w Wielkiej Brytanii. Oferuje pełen zakres szkoleń z języka SQL, od kursów wprowadzających po zaawansowane szkolenia z zakresu administracji i hurtowni danych – więcej szczegółów znajdziesz tutaj. Acuity ma biura w Londynie i Guildford w stanie Surrey. Od czasu do czasu bloguje na blogu Acuity.
Wyświetl wszystkie posty Bena Richardsona

Najnowsze posty Bena Richardsona (zobacz wszystkie)
  • Power BI: Waterfall Charts and Combined Visuals – 19 stycznia 2021
  • Power BI : Formatowanie warunkowe i kolory danych w akcji – 14 stycznia 2021 roku
  • Power BI: Importowanie danych z SQL Server i MySQL – 12 stycznia 2021

573 279 wyświetleń

© 2021 Quest Software Inc. WSZELKIE PRAWA ZASTRZEŻONE. | RODO | Warunki użytkowania | Prywatność

Articles
Previous Post

Najlepsze uniwersytety, na których można studiować rachunkowość i finanse

Next Post

9 psów o niebieskich oczach, które Cię zahipnotyzują

Dodaj komentarz Anuluj pisanie odpowiedzi

Najnowsze wpisy

  • Najlepsze szkoły fotograficzne na świecie, 2020
  • Suwerenni obywatele zabierają na drogi swoją antyrządową filozofię
  • Przewodnik po kosztach naprawy sztukaterii
  • Muckrakers (Polski)
  • Precyzyjna onkologia

Archiwa

  • Luty 2021
  • Styczeń 2021
  • Grudzień 2020
  • Listopad 2020
  • Październik 2020
  • Wrzesień 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.