Repository navigation
Expand file tree
/
Copy path33_SQL_Indexing-strategy.sql
More file actions
79 lines (60 loc) · 1.94 KB
/
Copy path33_SQL_Indexing-strategy.sql
File metadata and controls
79 lines (60 loc) · 1.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
-----------------INDEXING STRATEGY-----------------
/*
Unikaj posiadania zbyt wielu INDEXOW!
Gdy jest ich zbyt wiele to:
-- write do tabel zajmuje wiecej czasu,
poniewaz baza danych musi updatowac tez
indexy,
-- exectution plan nie bedzie optymalny
i robienie go zajmie wiecej czasu
Mozemy podzielic tworzenie strategii indexowania na 4 fazy.
Phase#1
Initial indexing strategy:
Jaki jest glowny cel naszej strategii indexowania?
OLAP (Online Analytical Processing)
DATA WAREHOUSE (DWH)
W takim podejsciu bedzimy czesto uzywac wiekszosci wartosci w wierszach.
Zwykle bardziej optymalizujemy READ performance.
Do tabeli fakt bedziemy podpinac dimensions i robic duze analizy
wiec COLUMNSTORE.
OLTP (Online Transaction Processing)
Optimazine Read or Write?
Zwykle bardziej optymalizujemy WRITE performance.
Wiele malych tabel, bedziemy uzywac
CLUSTERED INDEX PK
Phase#2
Usage Patterns Indexing:
1. Okreslamy czesto uzywane Tabele i kolumny (mozna dac zapytania do chata do analizy
zeby policzyl czego uzywamy czesto)
2. Wybieramy wlasciwy index (clustered non clustered, row store column store, unique,filtered,heap )
3. testujemy index
Phase#3
Scenario based indexing:
1. Identyfikujemy wolne zapytania (na dole skrypt)
2. Sprawdz execution plans (plany wykonania)
3. Wybierz wlasciwy index
4. (Test) Porownaj plany wykonywania
Phase#4
Monitoring and Maintenance
1. Monitoruj uzycie indexow w planach wykonywania
2. Monitoruj brakujace indexy
3. Monitoruj zdublowane indexy
4. Aktualizuj statystyki
5. Pilnuj fragmentacji indeksow.
NOTE: mozna zrobic sobie dashboard w PowerBIm,ktory monitoruje zdrowie naszych
indeksow.
*/
--1. Identyfikujemy wolne zapytania (na dole skrypt)
SELECT
TOP 10
qs.total_elapsed_time AS TotalElapsedTime,
qs.execution_count,
qs.total_worker_time AS TotalCPUTime,
qs.last_execution_time,
qt.text AS QueryText
FROM
sys.dm_exec_query_stats qs
CROSS APPLY
sys.dm_exec_sql_text(qs.sql_handle) qt
ORDER BY
qs.total_elapsed_time DESC;