Załóżmy, że mam tabelę:
create table Samochody
(
Zrodlo1 varchar(20) not null,
Zrodlo2 varchar(20) not null,
Marka varchar(100) not null,
Kolor varchar(100) not null,
MocSilnika varchar(100) not null,
KosztZakupu numeric not null,
WartoscSprzedazy numeric not null
)
Do tabeli są wprowadzane dane z różnych źródeł (źródło identyfikowane za pomocą Zrodlo1 i Zrodlo2) i przewiduje się ewentualną aktualizację danych w razie potrzeby. Aktualizacja polega na usunięciu danych mających konkretną wartość pól Zrodlo1 i Zrodlo2, a potem wstawienie na nowo danych. Oczywiście możliwe jest dopisanie danych z innego źródła, jak też rezygnacja z danych z określonego źródła. Jednakże, zestawy wartości pól Marka, Kolor, MocSilnika nie powtarzają się, ale wartość jednego z tych pól może się powtarzać.
Aby zapewnić wydajność przy kontroli, czy są dane z danego źródła i usuwaniu danych z konkrentego źródła, w tabeli jest założony indeks klastrowany na polach Zrodlo1 i Zrodlo2.
Natomiast korzystanie z danych polega na wywołaniu zapytania np.:
select sum(KosztZakupu), sum(WartoscSprzedazy), Marka, Kolor, MocSilnika from Samochody group by Marka, Kolor, MocSilnika
select sum(KosztZakupu), sum(WartoscSprzedazy), Marka, Kolor from Samochody group by Marka, Kolor
select sum(KosztZakupu), sum(WartoscSprzedazy), Kolor, MocSilnika from Samochody group by Kolor, MocSilnika
select sum(KosztZakupu), sum(WartoscSprzedazy) from Samochody
W tym przypadku nie bierze się pod uwagę pól Zrodlo1 i Zrodlo2, a dopuszczalne są wszystkie możliwe grupowania pól Marka, Kolor, MocSilnika (czyli jest 8 możliwości), każde grupowanie z podobną częstotliwością zapotrzebowania. W jaki sposób najlepiej usprawnić pobieranie danych?
Mi do głowy przychodzą następujące działania:
- Założyć indeks nieklastrowany na każde z pól grupowania (Marka, Kolor, MocSilnika), w tym przypadku będa trzy indeksy.
- Założyć jeden indeks nieklastrowany na wszystkie pola grupowania (Marka, Kolor, MocSilnika). Czy kolejnosć pól w indeksie ma znaczenie?
- Założyć indeks nieklastrowany na każde możliwe grupowanie, w tym przypadku będzie to 7 indeksów (bo nie da się założyć indeksu bez podawania pól).
- Rozszerzyć indeks klastrowany na wszystkie pola, czyli indeks klastrowany obejmowałby pola (Zrodlo1, Zrodlo2, Marka, Kolor, MocSilnika). Będzie to mieć istotny wpływ na edycję danych w opisany wyżej sposób?
Pobór danych ma miejsce istotnie częściej niż ewentualna kontrola i aktualizacja danych.