[PL] "Co to za query?" – przygrywka do konkursu
Krok 0. Idea
Jakiś czas temu przyszło mi do głowy, że fajnie byłoby urządzić mały konkurs, którego celem byłoby układanie zapytań do podanych planów wykonania. Celem takiego konkursu byłoby poznanie elementów planów wykonania (zarówno graficznych planów, jak i ich reprezentacji XML). Jak takie układanie zapytań mogłoby wyglądać? Przykład.
Dostajesz plik .sqlplan, który po otwarciu w SQL Server Management Studio wygląda tak:
To, czego na tym planie nie ma, to samo zapytanie (dzięki temu zabawa jest możliwa). Oczywiście, na pierwszy rzut oka nie widać wszystkiego, więc najeżdżasz kursorem myszy na ikonkę oznaczającą skanowanie indeksu (pierwsza od prawej) i widzisz na przykład:
Dalej już jest łatwo (choć dla pełnego obrazu lepiej zawsze obejrzeć strukturę XML pliku .sqlplan). Wiesz, z jakiej tabeli pobrano dane oraz jakie kolumny zostały wybrane (Output List na rysunku powyżej). Wychodzi na to, że powyższy plan może być wygenerowany dla zapytania:
SELECT * FROM HumanResources.Department
To oczywiście zapewne nie jedyne zapytanie, dla którego ów plan mógł zostać wygenerowany, ale ten fakt tylko powoduje, że zabawa może być jeszcze lepsza ;-)
Ten banalny przykład pokazuje ideę. Oczywiście docelowo stopień komplikacji zapytań będzie większy :-)
Krok 1. Materiały
"No dobra" – mógłby ktoś powiedzieć - "Ale co, jeśli nie znam się na planach wykonania zapytań?". To może czas zacząć się znać choć trochę? ;-) Materiałów jest sporo. Zacząć można od e-booka "Dissecting SQL Server Execution Plans" autorstwa Granta Fritchey’a. Bardzo dobre objaśnienia zawierają też książki z serii "Inside SQL Server 2005" (lub 2008). A i tak zawsze można sięgnąć do korzeni, czyli do Books Online.
Krok 2. Rozgrzewka
Czas na rozgrzewkę. Od tego, czy znajdą się zapaleńcy chętni do zabawy, uzależniam, czy dojdzie do kroku 3. czyli do konkursu :-)
Zasady rozgrzewki:
- instalujesz SQL Server 2008 oraz bazę danych AdventureWorks2008 (wszystkie zapytania są wykonywane na tejże bazie, ewentualnie można użyć bazy AdventureWorks na SQL Server 2005, ale nie gwarantuję sukcesu),
- ściągasz plik (pliki) .sqlplan,
- oglądasz je w Management Studio (lub jakkolwiek inaczej, możesz równie dobrze przeglądać kod XML w Notatniku),
- jeśli masz propozycję zapytań, dla których zostały wygenerowane podane plany, piszesz do mnie maila na adres pawelp@plssug.org.pl (jako tytuł maila podaj: Co to za query - rozgrzewka), w treści maila podajesz kody T-SQL zapytań, dla których udało Ci się rozwiązać zadanie,
- nie psuj zabawy innym i nie pisz rozwiązań w komentarzu do tej notki,
- jako dobrą odpowiedź do zadania rozumiem zapytanie, które wygeneruje zadany plan wykonania w sensie operatorów, predykatów, output list etc. – dane liczbowe ilustrujące statystyki wykonania zapytania mnie nie interesują.
Na najszybszych, najaktywniejszych i oczywiście na najlepszych zawodników biorących udział w rozgrzewce czekają niespodzianki ;-) |
Zadania na rozgrzewkę:
Poniżej 4 proste zadania na rozgrzewkę. Naprawdę proste. Nie powinno być problemów z ich rozwiązaniem. Jak okaże się, że zabawa jest fajna, napoczniemy konkurs i kolejne zadania będę publikował cyklicznie powiedzmy po 1-2 tygodniowo.
A zatem… Zachęcam do wzięcia udziału w rozgrzewce!
Na odpowiedzi na zadania z rozgrzewki czekam aż do końca miesiąca kwietnia (data może ulec zmianie – na skutek wcześniejszego ogłoszenia zwycięzców tej fazy konkursu).
Krok 3. Konkurs
Jak napisałem w kroku 3. – to, czy dojdzie do konkursu (choć i za rozgrzewkę można jakiś gadżecik capnąć ;-)), zależy od Was :-) Jeśli okaże się, że nie ma chętnych do zabawy, potencjalne nagrody (książki, plecaki MTS, inne fajne zabawki) rozejdą się jak bułeczki na spotkaniach PLSSUG Warszawa :-)
A zatem Wesołych Świąt Wielkanocnych i udanego polowania na zapytania ;-)
[EDIT] Podziękowania dla Marka Powichrowskiego za zwrócenie mi uwagi na nieprawidłowy format pliku do zadania 2. [/EDIT]