|
Index Tuning Wizard - narzędzie optymalizacji indeksów
Pakiet MS SQL Server zawiera narzędzie do optymalizacji indeksów o
nazwie Index Tuning Wizard. Prześledźmy wykorzystanie tego narzędzia
na konkretnym przykładzie.
Utworzenie tabeli
Utwórzmy tabelę tabela1 o następującej budowie:
| Nazwa kolumny | Typ - dodatkowe właściwości |
| id | int, IDENTITY(1,1) |
| dane | varchar(50) |
Można to zrobić za pomocą następującego polecenia:
CREATE TABLE tabela1 (
id int IDENTITY(1,1),
dane varchar(50)
)
Następnie wypełniamy utworzoną tabelę losowymi danymi. Do generowania danych wykorzystamy skrypt
w języku Transact SQL :
DECLARE @n int
SET @n=0
WHILE @n<10000
BEGIN
INSERT INTO tabela1 (dane) values (cast(1000*RAND(@n*1000) as varchar(50)))
SET @n=@n+1
END
Spowoduje on wygenerowanie 10000 rekordów.
Utworzenie kopii tabeli bez indeksów
Utwórzmy teraz kopię tabeli tabela1 zapisując ją pod nazwą tabela2. Kopia posłuży nam do porównania palnów wykonania
identycznych zapytań na tabelach zawierających identyczne dane. Jedyną różnicą będzie obecność indeksów w jednej z tabel.
Kopię tabeli można wykonać za pomocą Eksportu danych. Innym wyjściem jest utworzenie tabeli tabela2 za pomocą zapytania:
CREATE TABLE tabela2 (
id int IDENTITY(1,1),
dane varchar(50)
)
i przekopiowanie danych z tabeli tabela1 do tabela2 za pomocą zapytania:
INSERT INTO tabela2 (dane) SELECT dane FROM tabela1
Zapytanie SELECT, dla którego będziemy optymalizować indeksy
Optymalizacja indeksów w tabeli zawsze dotyczy konkretnego zapytania. Dlatego musimy je sformułować. Oto ono:
SELECT id,dane FROM tabela1 WHERE dane > '1590.999' ;
Zapytanie to zapisujemy w pliku indeksy1.sql.
Optymalizacja indeksów
Teraz można już uruchomić Index Tuning Wizard. Po uruchomieiu Enterprise
Managera wybieramy z menu Tools | Wizards. Następnie wybieramy Management
| Index Tuning Wizard. Klikamy dwa razy "Dalej" i następnie w oknie
"Specify workload" wybieramy plik indeksy1.sql i klikamy "Dalej". W następnym oknie "Select Table to tune"
wybieramy tabelę tabela1 i klikamy "Dalej". Spowoduje to rozpoczęcie analizy. W jej wyniku kreator
zaproponował utworzenie indeksu i określił szacunkowy wzrost wydajności spowodowany jego zastosowaniem.
Klikamy "Dalej" i w oknie "Schedule Index Update Job" zaznaczamy "Apply changes".
Porównanie planów wykonania zapytań z i bez indeksów
Aby prównać plany wykonania zapytań z indeksami i bez indeksów należy w Query Analyzerze wpisać dwa zapytania:
SELECT id,dane FROM tabela1 WHERE dane > '1590.999' ;
SELECT id,dane FROM tabela2 WHERE dane > '1590.999' ;
i z menu Query wybieramy "Dispaly Estimated Execution Plan". Pojawią się wtedy dwa plany wykonania:
jeden dla tabeli z indeksami i jeden dla tabeli bez indeksów. Porównanie wartości procentowych
znajdujących się po "Query cost (relative to the batch)" pozwala porównać wydajność zapytań.
Zgodnie z oczekiwaniami zapytanie z wykorzystaniem indeksów jest wydajniejsze przy czym koszt
zapytania z indeksem ma się do kosztu zapytania bez indeksu jak 3/7.
|
|
|