Optymalizacja zapytań w SQL Server Roman Czarko

advertisement
Optymalizacja zapytań w SQL Server
Roman Czarko-Wasiutycz
[email protected]
Roman Czarko-Wasiutycz
 Od kilkunastu lat zbieram doświadczenia związane z technologiami Microsoftu.
Począwszy od developera C++, PHP, C#, administratora SharePoint poprzez
administrację bazami Microsoft SQL Server na projektowaniu i rozwijaniu dużych
hurtowni danych kończąc.
 Posiadacz tytułów: MCTS, MCSA: SQL Server 2012, MCSE: BI oraz MCSE: Data
Management and Analytics
 Członek Zarządu Stowarzyszenia Użytkowników SQL Server PLSSUG
 Wolontariusz oraz współorganizator konferencji SQLDay 2013-2016, SQLDay Lite,
SQLSaturday i innych.
 Lider Wrocławskiego oddziału Stowarzyszenia PLSSUG
 Prywatnie fan gier komputerowych :)
Agenda
Indeksy
Proces wykonania i operatory
Demo
Narzędzia
Indeksy
• Jak działają indeksy
• Gdzie w indeksie są dane?
• Z czym wiąże się zbyt duża liczba indeksów
• Indeksy w OLTP i DWH
• Jak typować kolumny do indeksowania
CREATE CLUSTERED INDEX [CX_Id] ON [dbo].[Acount] ([Id] ASC)
CREATE NONCLUSTERED INDEX [IX_accountNumber_bankName] ON [dbo].[Account]
( [accountNumber] ASC, [bankSymbol] ASC ) INCLUDE ( [bankName]);
8K
8K
CI / NCI
8K
8K
DANE W CI !
8K
8K
8K
8K
8K
Indeksy – jak typować kolumny
Jak będzie wyglądał dostęp do danych, jak wstawianie nowych wierszy?
• Używane w klauzulach WHERE, JOIN, ORDER BY, GROUP BY – zwróć
uwagę na SELECT
• Dane unikalne lub z dużą różnorodnością
• Dane w kolumnie są sekwencyjne (Clustered!)
• Stałe, niezmienne dane w kolumnie indeksowanej
• Małe typy danych
• Ilość indeksów dostosuj do charakteru tabeli
Proces wykonania
• Operatory budujące drzewo wykonania
• Żądania nowych danych płyną w „dół i prawo” drzewa od pierwszego
elementu
• Dane w odpowiedzi na żądania płyną w „górę i w lewo”
• Podstawowe metody komunikacji pomiędzy operatorami: Init, GetNext, Close
Operatory – na co zwrócić uwagę?
• Operatory alokujące pamięć – alokują pamięć na podstawie statystyk
przed wykonaniem zapytania – np. sort, hash aggregate, and hash join
• Operatory blokujące – muszą odczytać wszystkie wiersze, żeby
przekazać rezultat dalej np. sort, count, min, max…
• Operatory nie blokujące – po odczytaniu i przetworzeniu wiersza
przekazują wynik działania dalej np. compute scalar
DEMO
PLSSUG
Polish SQL Server User Group
• http://plssug.org.pl
• http://meetup.com/PLSSUG
• http://youtube.com/PLSSUG
Jeśli masz pytanie to jest dobry czas, żeby je zadać 
Źródła
•
•
•
•
•
•
https://technet.microsoft.com/en-us/library/ms187373(v=sql.105).aspx
https://www.youtube.com/watch?v=GSZPvF2u6WY
https://www.youtube.com/watch?v=lxdDg2F0hfs
https://sqlperformance.com/2012/07/t-sql-queries/running-totals
https://technet.microsoft.com/en-us/library/2007.11.sqlquery.aspx
https://technet.microsoft.com/en-us/library/bb510478(v=sql.105).aspx
Dziękuję za uwagę 
Download