Mam bazę danych, w której uruchamiam program profilujący idoradca bazy danych w celu poprawy wydajności bazy danych. Zrobiłem i do tej pory tak dobrze, doradca przedstawił mi wiele indeksów i statystyk, które można utworzyć, aby uzyskać lepszą wydajność. Ale czytając wypowiedzi, na które wpadłem:
CREATE NONCLUSTERED INDEX [_dta_index_xinfobaseacl_11_397426127__K3_K7_K1_K5] ON [dbo].[xinfobaseacl]
(
[lviewid] ASC,
[lparentid] ASC,
[lid] ASC,
[xlactor] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go
CREATE NONCLUSTERED INDEX [_dta_index_xinfobaseacl_11_397426127__K7_K5_K1_K3] ON [dbo].[xinfobaseacl]
(
[lparentid] ASC,
[xlactor] ASC,
[lid] ASC,
[lviewid] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
go
Ta sama tabela, te same kolumny, te same parametry, tylko inna kolejność sortowania kolumn ...
Więc jestem zdezorientowany, czy porządek sortowania naprawdę ma znaczenie przy tworzeniu indeksu?
Odpowiedzi:
2 dla odpowiedzi № 1Tak, kolejność kolumn w złożonym indeksie ma znaczenie.
Oba będą działać równie dobrze dla predykatu równości na wszystkich 4 kolumnach.
Ale pierwszy będzie dodatkowo obsługiwał zapytania takie jak
WHERE lviewid = 1 AND lparentid 1 AND lid = 1
ORDER BY xlactor
Drugi obsługuje zapytania takie jak
WHERE parentid = 1 AND xlactor = 1
ORDER BY lid, xlactor
To, czy powinieneś utworzyć oba indeksy, zależy od obciążenia. Czy przekazałeś DTA reprezentatywne obciążenie, w tym oświadczenia o modyfikacji danych?
1 dla odpowiedzi nr 2
„Mylicie terminologie. Kolejność sortowania nie ma wielkiego, jeśli w ogóle, wpływu, ale kolejność kolumn w indeksie może być ważna.
Prawidłowa kolejność kolumn dla indeksu złożonego zależy od zapytania, ale z reguły kolumna z najmniejszą liczbą różnych wartości powinna być pierwsza.