Dr inŝ. Dziwiński Piotr Katedra InŜynierii Komputerowej Zapytania, złączenia, optymalizacja zapytań, planowanie zapytań, optymalizacja indeksów. Kontakt: piotr.dziwinski@kik.pcz.pl 2 SQLQuery4_1.sql 3 4 SQLQuery4_2.sql 5 SQLQuery4_3.sql 6 1
Testowe zapytanie do tabeli: Przykładowe zapytanie: Operatory Otrzymane wyniki: SQLQuery4_4.sql 7 http://msdn2.microsoft.com/en-us/library/ms175913.aspx SQLQuery4_5.sql 8 Przykładowe zapytanie dla dwóch złączonych tabel Parsowanie Drzewo zapytania Plan optymalny Wykonanie zapytania SQLQuery4_6.sql 9 10 Fizyczne i logiczne operatory (iteratory) reprezentują wykonanie zapytania lub wyraŝenie w języku operowania danymi (DML) Równoległość fizycznych operatorów do reprezentowania operacji równoległych, są one podzbiorem logicznych i fizycznych operatorów, przedstawiają inny poziom analizy planu wykonania zapytania Operatory kursorów, reprezentują transakcyjne operacje kursorów SQL Select (Result Result) Nonclustered Index_Seek Nested Loops Sort Table Scan Merge Join Clustered Index Seek RID Lookup Top Clustered Index Scan and Key Lookup Compute Scalar Filter Lazy Spool Spool Eager Spool Non clustered index Scan Hash Match Constant Scan Stream Aggregate Transakcyjne elementy języka SQL takie jak: Assign, Declare, If, Select, While i tp. Distribute Streams Repartiti on Streams Gather Streams Bitmap Split 11 12 2
Wymagające duŝej ilości pamięci do wykonania Blokujące zwracające dane dopiero po uzyskaniu wszystkich danych na wejściu Nieblokujące produkujące dane równolegle z procesem otrzymywanych danych na wejściu Table scan SQLQuery4_7.sql 13 14 Clustered index scan Demo SQLQuery4_8.sql 15 16 Clustered index scan Clustered index seek W zasadzie działa w ten sam sposób jak skanowanie tabeli. NaleŜy się zastanowić, czy wszystkie zwrócone wiersze są konieczne, czy teŝ moŝna ograniczyć ich liczbę podając odpowiedni warunek w klauzurze WHERE 17 SQLQuery4_9.sql 18 3
Clustered index seek NonClustered index scan 19 SQLQuery4_10.sql 20 NonClustered index seek Zapytanie do bazy danych bez indeksu niezgrupowanego dla Kolumny EmailAdress SQLQuery4_11.sql 21 SQLQuery4_12.sql 22 Key lookup RID lookup SQLQuery4_13.sql 23 SQLQuery4_14.sql 24 4
RID lookup Compute scalar SQLQuery4_15.sql 25 SQLQuery4_16.sql 26 Sort Stream aggregate SQLQuery4_17.sql 27 SQLQuery4_18.sql 28 Filter Hash match 29 SQLQuery4_19.sql 30 5
Hash match Hash match Czasem moŝliwe jest zastosowanie efektywniejszej metody łączenia tabel jeŝeli: zostaną stworzone i wykorzystane poprawne indeksy zostanie dołączona klauzula WHERE w klauzurze WHERE zostaną zastosowane odpowiednie operatory SQLQuery4_20.sql 31 32 Hashing technika programowa w której dane są konwertowane do symbolicznej formy ułatwiającej efektywne wyszukiwanie danych Hash table struktura danych dzieląca wszystkie elementy na kategorie jednakowej wielkości umoŝliwiająca szybki dostęp do elementów Tabela 1 Tabela 2 Hash Table Poszukiwanie zgodnych wierszy Tabela wynikowa 33 34 Nested loops join Merge join SQLQuery4_21.sql SQLQuery4_22.sql 35 36 6
Merge join Typ łączenia Hash Indeks na łączonych kolumnach Wewnętrzna: nie Zewnętrzna: opcjonalnie Rozmiar łączonych tabel Posortowanie Rodzaj łączenia Dowolny Nie Równozłączenie Merge Obie tabele muszą DuŜe Tak Równozłączenie Nested loop Wewnętrzna: musi Zewnętrzna: niekoniecznie Małe Opcjonalnie Dowolny Demo SQLQuery4_24.sql 37 Ograniczenie zapytania Zapytanie z wielokrotnym złączeniem SQLQuery4_23.sql 39 SQLQuery4_26.sql 40 SQLQuery4_27.sql 41 Diagram_27 42 7
Włączenie tekstowej wersji planu wykonania: Uwaga Włączenie statystyk dla tekstowej wersji: 43 44 Pytania, sugestie: piotr.dziwinski@kik.pcz.pl Demo 45 Dr inŝ. Dziwiński Piotr Katedra InŜynierii Komputerowej 46 8