Top Banner
Implementacja indeksów i statystyk Training Kit (Exam 70-461): Querying Microsoft® SQL Server® 2012
17

Implementacja indeksów i Statystyk

Jan 11, 2017

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Implementacja indeksów i Statystyk

Implementacja indeksów i statystykTraining Kit (Exam 70-461): Querying Microsoft® SQL Server® 2012

Page 2: Implementacja indeksów i Statystyk

2

Maciej Szczerkowski• Projektant / programista baz danych

• Microsoft SQL Server 2000, 2005, 2008

• Firebird 2.1, 2.5• Programista

• C/C++• VBA• C#

• Zainteresowania• Programowanie / bazy danych• Film• Fotografia / grafika komputerowa• Science-fiction

1999

2000

2001

2006

2009

2010

Page 3: Implementacja indeksów i Statystyk

3

Agenda

• Organizacja danych w MS SQL Server• Indeksy

• Clustered• Nonclustered• Widoki indeksowane

• Search ARGuments• Statystyki

Page 4: Implementacja indeksów i Statystyk

4

Fizyczna organizacja danych

Exte

nt

Page

.mdf

.ndf

dat

a fil

es

Row

s

Prim

ary

File

Grou

p | .

ldf l

og

files

Baza

dan

ych

8 sąsiadujących stron (8 KB każda)Kiedy extent jest pełny, następny rekord „zajmuje” cały kolejny extent

8 KBLiczba rekordów / stronę zależy od wielkości (bajt) / rekordKiedy storna jest pełna następuje podział:•Nowa strona jest alokowana: ½ danych ze starej storny przesuwana na nową stronę

8060 bajtów i 1024 kolumny

Page 5: Implementacja indeksów i Statystyk

5

Logiczna organizacja danych – Heap (sterta)• Index Allocation MAP (IAM)• Dane nie są uporządkowane• Określone rekordy nie mogą być szybko odczytane

(chyba że został zdefiniowany NonClustered index)• SQL Server skanuje całą stertę• Data pages nie są zorganizowane w listę > dostęp

do kolejnych stron za pośrednictwem Index Allocation Map (IAM)

• Brak Clustered Index • nie jest wymagany dodatkowy czas na

utrzymanie indeksu• nie jest wymagane dodatkowe miejsce na

przechowywanie drzewa Clustered Index• Tabela posiada wartość Index_id = 0 w widoku

sys.indexes

Page 6: Implementacja indeksów i Statystyk

6

Logiczna organizacja danych – Clustered index• Tabela jako zrównoważone drzewo binarne

• Korzeń drzewa zawiera klucz indeksu• Dane przechowywane na liściach drzewa / data pages• Data pages uporządkowane jako lista dwukierunkowa

• Dane logicznie uporządkowane zgodnie z definicją CREATE INDEX

• Szybki dostęp do danych z wykorzystaniem kolumn tworzących indeks

• Dodatkowy czas wymagany do utrzymania indeksu podczas operacji INSERT, UPDATE, DELETE

• Dodatkowa przestrzeń wymagana do przechowywania drzewa Clustered Index

• Tabela posiada wartość Index_id = 1 w widoku sys.indexes

• Tylko jeden indeks Clustered na tabelę• Tworzony automatycznie podczas definicji PK lub

UNIQUE

Page 7: Implementacja indeksów i Statystyk

7

Logiczna organizacja danych – NonClustered Index

• Indeks NonClustered tworzy drzewo binarne• Korzeń drzewa zawiera klucz

indeksu• Strony indeksu są kopią danych z

tabeli• Liście indeksu zawierają wskaźniki

do tabeli źródłowej:• Na klucz indeksu clustered, lub• Row locator sterty

• Columnstore index

Page 8: Implementacja indeksów i Statystyk

8

Widoki indeksowane

• SQL Server odczytuje wcześniej zagregowane dane

• Widok indeksowany posiada wiele ograniczeń

• https://msdn.microsoft.com/en-us/library/ms191432%28v=sql.110%29.aspx

• Możliwości Enterprise Edition

Page 9: Implementacja indeksów i Statystyk

9

CREATE INDEX

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON <object> ( column [ ASC | DESC ] [ ,...n ] ) [ INCLUDE ( column_name [ ,...n ] ) ] [ WHERE <filter_predicate> ] [ WITH ( <relational_index_option> [ ,...n ] ) ] [ ON { partition_scheme_name ( column_name ) | filegroup_name | default } ] [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

[ ; ]

<relational_index_option> ::={ PAD_INDEX = { ON | OFF } | FILLFACTOR = fillfactor | SORT_IN_TEMPDB = { ON | OFF } | IGNORE_DUP_KEY = { ON | OFF } | STATISTICS_NORECOMPUTE = { ON | OFF } | DROP_EXISTING = { ON | OFF } | ONLINE = { ON | OFF } | ALLOW_ROW_LOCKS = { ON | OFF } | ALLOW_PAGE_LOCKS = { ON | OFF } | MAXDOP = max_degree_of_parallelism | DATA_COMPRESSION = { NONE | ROW | PAGE} [ ON PARTITIONS ( { <partition_number_expression> | <range> } [ , ...n ] ) ]}

Page 10: Implementacja indeksów i Statystyk

10

Search ARGuments

• Zapytanie muszą być wystarczająco selektywne

• SQL Server (zawsze) wykorzysta indeks obejmujący zapytanie

• NonCovering Idx Seek przy selektywności poniżej 1%

• SQL Server estymuje selektywność na podstawie statystyk

• SARG

• Unikamy negacji w klauzuli WHERE

• Kolumna po jednej stronie wyrażenia

Page 11: Implementacja indeksów i Statystyk

11

Kolejność kolumn ma znaczenie

• Indeks ON (ColA, ColB) nie jest taki sam jak ON (ColB, ColA)

• Indeks POC

• Partitioning (klauzula GROUP BY)

• Ordering (klauzula ORDER BY)

• Covering (klauzula SELECT)

Page 12: Implementacja indeksów i Statystyk

12

Realizacja zapytania

KompilacjaOptymalizacja zapytania

• Indeksy• Struktura fizyczna i

logiczna• Zbuforowane plany

zapytania• Ilość wierszy

(STATYSTYKI)

Standaryzacja zapytania

Parsowanie zapytania

Page 13: Implementacja indeksów i Statystyk

13

Statystyki

• Statystyki przechowują informacje o liczbie wierszy [biorących udział w zapytaniu]

• DBCC SHOW_STATISTICS

• Automatyczna aktualiacja statystyk

• AUTO_CREATE_STATISTICS

• AUTO_UPDATE_STATISTICS

• AUTO_UPDATE_STATISTICS_ASYNC

• Manualna aktualizacja statystyk

Page 14: Implementacja indeksów i Statystyk

14

Demo

Page 15: Implementacja indeksów i Statystyk

15

Podsumowanie

• Tabela może zawierać TYLKO jeden Clustered Index – zakładajmy go [świadomie]

• Indeks NonClustered powinien być zakładany na kolumnach o wysokiej selektywności

• SELECT czerpie korzyści z indeksów ale (zazwyczaj) kosztem CREATE, UPDATE, DELETE

• Indeksy NonClustered denormalizują bazę danych i zajmują dodatkowe miejsce

• Statystyki są niezbędne do poprawnego wykorzystania indeksów

• SQL Server sam dba o statystyki ale czasami trzeba mu pomóc

Page 16: Implementacja indeksów i Statystyk

16

Więcej wiedzy

• Itzik Ben-Gan, Dejan Sarka, and Ron Talmage. Training Kit (Exam 70-461): Querying Microsoft® SQL Server® 2012

• SQLDay 2014 | track1 | Marcin Szeliga - Denormalizacja za pomocą indeksów

• https://msdn.microsoft.com/en-us/library/ms175049%28v=sql.110%29.aspx

• https://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html

• Demo na podstawie:

• http://www.jasonstrate.com/2013/06/my-teched-presentation-indexing-fundamentals-for-microsoft-sql-server/

Page 17: Implementacja indeksów i Statystyk

17

Kontakt

email [[email protected]]

website [www.szczerkowski.com]

twitter [@mszczer]

linkedIn [http://pl.linkedin.com/in/maciejszczerkowski]

skype [maciek.szczerkowski]