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ę