Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 11383|Odpowiedź: 0

[Komunikacja] Uczenie indeksu kompozytowego SQL Server

[Skopiuj link]
Opublikowano 29.01.2015 13:06:03 | | |

Przegląd
Czym jest pojedynczy indeks, a czym jest indeks złożony? Kiedy stworzyć nowy indeks złożony i na co zwracać uwagę w indeksie złożonym? Ten artykuł jest głównie podsumowaniem niektórych dyskusji w Internecie.

Jeden. Koncepcja

Pojedynczy indeks to sytuacja, w której indeks jest wymieniony w jednej kolumnie, czyli zatwierdzenie utworzenia nowego indeksu jest realizowane tylko na jednej kolumnie.

Użytkownicy mogą tworzyć indeksy na wielu kolumnach, które nazywane są indeksami złożonymi (indeksami połączonymi). Indeksy złożone są tworzone dokładnie w ten sam sposób co pojedyncze indeksy. Jednak indeksy złożone wymagają mniejszego narzutu podczas operacji bazy danych i mogą zastąpić wiele pojedynczych indeksów. Gdy liczba wierszy w tabeli jest znacznie większa niż liczba kluczy, ta metoda może znacząco przyspieszyć tempo zapytań tabeli.

Istnieją dwa pojęcia jednocześnie: wąskie indeksy i szerokie indeksy; wąskie indeksy odnoszą się do indeksów z 1-2 kolumnami i zazwyczaj odnoszą się do jednego indeksu, chyba że zakreślono inaczej. Szeroki indeks to indeks z więcej niż 2 kolumnami.

Ważną zasadą projektowania indeksów jest stosowanie wąskich indeksów zamiast szerokich, ponieważ wąskie indeksy są zwykle skuteczniejsze niż indeksy połączone. Posiadanie węższych indeksów daje optymalizatorowi większy wybór, co często pomaga poprawić wydajność.

Dwa. Zastosowanie

Stwórz indeks
Utwórz indeks idx1 w tabeli1(col1,col2,col3)  
Zapytać
wybierz * z tabeli1, gdzie col1= A i col2= B oraz col3 = C

W tym momencie optymalizator zapytań nie skanuje tabeli, lecz bezpośrednio pobiera dane z indeksu, ponieważ w indeksie znajdują się dane, które nazywane są zapytaniami nakładkowymi, a szybkość zapytań jest bardzo szybka.   

Trzy. Notatki:

1. Kiedy stosować indeks złożony
W warunku gdzie pole jest indeksowane, a jeśli używa się wielu pól, używa się indeksu złożonego. Generalnie nie buduj żadnych indeksów w polu select (jeśli chcesz zapytać select col1, col2, col3 z mytable, nie potrzebujesz powyższego indeksu). Indeksowanie na podstawie warunków gdzieś jest niezwykle ważną zasadą. Uważaj, by nie używać zbyt wielu indeksów, bo w przeciwnym razie będzie to miało duży wpływ na efektywność aktualizacji tabel, ponieważ podczas pracy z tabelami musisz poświęcić dużo czasu na tworzenie indeksów.

2. W przypadku indeksów złożonych, przy użyciu zapytania najlepiej stosować kolejność wyszukiwania indeksów, która jest najbardziej efektywna. Na przykład:  
  IDX1:create index idx1 na table1(col2,col3,col5)  
  wybierz * z tabeli1, gdzie col2=A i col3=B oraz col5=D  

Jeśli jest to "wybierz * z tabeli1, gdzie col3=B i col2=A oraz col5=D"
Albo "wybierz * z tabeli1, gdzie col3=B" nie użyje indeksu, albo efekt nie jest zauważalny

3. Czy indeks złożony zastąpi pojedynczy indeks?
Wiele osób uważa, że dodanie dowolnego pola do indeksu klastrowanego może poprawić szybkość zapytań, ale niektórzy są zdezorientowani: jeśli złożone pola indeksu są zapytania osobno, czy prędkość zapytań zostanie spowolniona? W tym pytaniu, przyjrzyjmy się następującej prędkości zapytań (zestaw wynikiem to 250 000 danych) :( kolumna daty fariqi zajmuje pierwsze miejsce w początkowej kolumnie indeksu agregacji złożonej, a nazwa użytkownika neibuyonghu zajmuje drugie miejsce)

IDX1:create   index   idx1   on   Tgongwen(fariqi,neibuyonghu)  

(1) wybierz gid, fariqi, neibuyonghu, tytuł od Tgongwena
Gdzie Fariqi>'2004-5-5'

Szybkość zapytań: 2513 ms

(2) wybierz gid, fariqi, neibuyonghu, tytuł od Tgongwena
gdzie fariqi>'2004-5-5' i neibuyonghu='biuro'

Prędkość zapytań: 2516 ms

(3) wybierz gid, fariqi, neibuyonghu, tytuł od Tgongwena
gdzie neibuyonghu='biuro'

Prędkość zapytania: 60280 milisekund

Z powyższych eksperymentów wynika, że jeśli jako warunek zapytania użyta jest tylko kolumna początkowa indeksu klastrowego, szybkość zapytania wszystkich kolumn z indeksem złożonym jest niemal taka sama, nawet nieco szybsza niż przy użyciu wszystkich kolumn indeksu złożonego (gdy liczba zbiorów wyników zapytań jest taka sama). Jeśli jako warunki zapytania użyte są tylko kolumny niebędące początkowym indeksu złożonego, ten indeks nie zrobi nic. Oczywiście szybkość zapytań instrukcji 1 i 2 jest taka sama, ponieważ liczba wpisów w zapytaniu jest taka sama; jeśli użyte są wszystkie kolumny indeksu złożonego, a wyników zapytań jest niewiele, powstanie to "nadpisania indeksu", co pozwala na optymalizację wydajności. Pamiętaj też, że niezależnie od tego, czy często używasz innych kolumn w indeksie agregatycznym, to właśnie kolumna wiodąca powinna być używana najczęściej.

[Ref: Schemat algorytmu optymalizacji zapytań i paginacji http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]

4. Czy muszę jednocześnie stworzyć jeden indeks i indeks złożony w tej samej kolumnie?
Eksperyment: tabela Sysbase 5.0 tabela1 pola: col1, col2, col3  

Kroki testowe:  
(1) Utworzenie indeksu idx1 w słupku 1  
  Wykonaj select * z tabeli1, gdzie col1=A używa idx1  
  Wykonaj select * z tabeli1, gdzie col1=A i col2=B również używają idx1  

(2) Usuń indeks idx1, a następnie utwórz idx2 na indeksie złożonym (col1,col2)  
  Oba zapytania używają idx2  

(3) Jeśli oba indeksy idx1 i idx2 istnieją  
  Nie jest to tak, że col1='A' używa idx1; gdzie col1=A i col2=B używają idx2.  
  Jego optymalizator zapytań wykorzystuje jeden z wcześniej powszechnie używanych indeksów. Użyj albo idx1, albo idx2.  
   
Widać, że
(1) Dla tabeli, jeśli na (słupek 1, słupek 2) jest indeks złożony, nie ma potrzeby tworzenia pojedynczego indeksu na słupku 1 jednocześnie.
(2) Jeśli warunki zapytania tego wymagają, można dodać złożony indeks na (col1, col2), gdy na col1 jest już jeden indeks, co może do pewnego stopnia poprawić efektywność.
(3) Nie ma szczególnie wielu korzyści z ustanowienia indeksu złożonego z wieloma polami (zawierającymi 5 lub 6 pól) jednocześnie, ale stosunkowo mówiąc, utworzenie indeksu z wieloma wąskimi polami (zawierającym tylko jedno, a maksymalnie 2 pola) może osiągnąć większą efektywność i elastyczność.



5. Czy muszę pokryć zapytanie?
Zazwyczaj najlepiej nie stosować strategii naciskającej na pełne pokrycie zapytań. Jeśli wszystkie kolumny w klauzuli Select zostaną nadpisane przez indeks nieklastrowany, optymalizator rozpozna to i zapewni dobrą wydajność. Jednak często skutkuje to zbyt szerokim indeksem i nadmiernym poleganiem na prawdopodobieństwie, że optymalizator użyje tej polityki. Zazwyczaj wąskie indeksy stosuje się dla większej liczby zapytań, co zapewnia lepszą wydajność przy dużych zapytaniach.




Poprzedni:C# winform uniemożliwia wtrysk SQL
Następny:Kody błędów i rozwiązania serwera Dell 2013 Edition
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com