Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, SDM-2 2008.

Podobne prezentacje


Prezentacja na temat: "Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, SDM-2 2008."— Zapis prezentacji:

1 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, SDM

2 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 2 Plan prezentacji Jak pisać wydajne zapytania SQL ? Wydajność poleceń SQL, a fizyczny projekt bazy danych, czyli o… indeksach, partycjach i widokach zmaterializowanych Jak Oracle, DB2 oraz SQL Server automatycznie optymalizują zapytania i dostęp do danych Klika słów o pracy magisterskiej

3 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 3 Wydajność systemu Oracle Na podstawie: C. Millsap J. Holt Optimizing Oracle Performance

4 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 4 Metody dostępu do tabel pełny przegląd tabeli dostęp przez ROWID

5 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 5 Współdzielenie zapytań SQL Warunki korzystania z współdzielonego zapytania: dokładna (co do znaku) zgodność treści pomiędzy zapytaniem zadanym oraz przechowywanym w obszarze współdzielonym SELECT * FROM EMP SELECT * From EMP obiekty, do których odnosi się zapytanie muszą być dokładnie tymi samymi obiektami co w zapytaniu współdzielonym nazwy zmiennych związanych muszą być identyczne SELECT * FROM EMP WHERE id = :manager_id SELECT * FROM EMP WHERE id = :worker_id

6 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 6 Należy unikać * w klauzuli SELECT Wykorzystywanie klauzuli WHERE zamiast HAVING Zapytania – dobre praktyki (1) SELECT r.nazwa, COUNT(*) as ilosc FROM region r, sklep s WHERE r.region_id = s.region_id AND r.nazwa != mazowieckie AND r.nazwa != śląskie GROUP BY r.nazwa HAVING ilosc < 5 SELECT r.nazwa, COUNT(*) as ilosc FROM region r, sklep s WHERE r.region_id = s.region_id GROUP BY r.nazwa HAVING r.nazwa != mazowieckie AND r.nazwa != śląskie AND ilosc < 5

7 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 7 Zapytania – dobre praktyki (2) należy unikać zbędnych klauzul DISTINCT gdy zastosowanie klauzuli DISTINCT jest konieczne, należy zastanowić się czy nie można jej tak przekształcić aby zastosować operator EXISTS SELECT DISTINCT p.nazwa FROM produkt p, sprzedaz s WHERE p.produkt_id = s.produkt_id SELECT p.nazwa FROM produkt p WHERE EXISTS ( SELECT 1 FROM sprzedaz s WHERE p.produkt_id = s.produkt_id )

8 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 8 Zapytania – dobre praktyki (3) UNION ALL zamiast UNION (SELECT s.nazwa, s.miasto, s.ulica FROM sklep s, region r WHERE s.region_id = r.region_id AND r.kod = SL ) UNION (SELECT s.nazwa, s.miasto, s.ulica FROM sklep s, region r WHERE s.region_id = r.region_id AND s.kod = MZ ) (SELECT s.nazwa, s.miasto, s.ulica FROM sklep s, region r WHERE s.region_id = r.region_id AND r.kod = SL ) UNION ALL (SELECT s.nazwa, s.miasto, s.ulica FROM sklep s, region r WHERE s.region_id = r.region_id AND s.kod = MZ )

9 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 9 Zapytania – dobre praktyki (4) NOT EXIST zamiast NOT IN SELECT s.numer, s.nazwa FROM sklep s WHERE s.region_id NOT IN (SELECT r.region_id FROM region r WHERE r.kod IN (SL, MZ) ) SELECT s.numer, s.nazwa, FROM sklep s WHERE NOT EXISTS (SELECT 1 FROM region r WHERE IN (SL, MZ) )

10 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 10 obliczenia na indeksowanej kolumnie blokują korzystanie z indeksu konkatenacja indeksowanych kolumn Zapytania – wykorzystanie indeksów (1) SELECT p.nazwa, p.cena FROM produkt p WHERE ps.cena * 0,2 > 100 SELECT p.nazwa, p.cena FROM produkt p WHERE ps.cena > 500 SELECT s.nazwa FROM sklep s, region r WHERE s.region_id = r.region_id AND r.nazwa || - ||s.miasto = mazowieckie-Warszawa SELECT s.nazwa FROM sklep s, region r WHERE s.region_id = r.region_id AND r.nazwa = mazowieckie AND s.miasto = Warszawa

11 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 11 Zapytania – wykorzystanie indeksów (2) zastosowanie funkcji na indeksowanej kolumnie niejawna konwersja typów SELECT s.nazwa, s.miasto FROM sklep s WHERE s.numer = 1234 SELECT s.nazwa, s.miasto FROM sklep s WHERE s.numer = 1234 SELECT s.nazwa, s.miasto FROM sklep s WHERE TO_NUMBER( s.numer) = 1234 SELECT … FROM sklep s WHERE UPPER(s.nazwa) = SUPERSAM SELECT … FROM sklep s WHERE s.nazwa = SUPERSAM

12 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 12 Zapytania – wykorzystanie indeksów (3) wykorzystanie w warunku porównania operatorów: NOT, !=, <> blokuje korzystanie z indeksu Efektywniej na indeksowanej kolumnie wykonywane jest porównanie >=, niż > Zastosowanie wzorca w klauzuli LIKE, zawierającego na początku znak specjalny % lub _ blokuje wykorzystanie indeksu SELECT p.nazwa, p.cena FROM produkt p WHERE p.nazwa LIKE %orzechy%

13 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 13 Indeksy B-drzewa Bitmapowe … Partycje Range List Hash Widoki zmaterializowane Struktury fizyczne poprawiające wydajność Jednopoziomowe partycjonowanie Partycjonowanie złożone

14 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 14 Automatyczne strojenie zapytań Oracle – SQL Tuning Advisor oraz SQL Access Advisor DB2 – DB2 Design Advisor SQL Server – Database Tuning Advisor

15 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 15 Przykład interfejsu – Oracle (1) Rysunek 1. Uruchomienie SQL Tuning Advisor

16 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 16 Przykład interfejsu – Oracle (2) Rysunek 2. Wynik działania SQL Tuning Advisor

17 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 17 Przykład interfejsu – Oracle (3) Rysunek 3. Nowy plan zapytania po implementacji wskazówki SAL Tuning Advisor

18 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 18 Kilka słów o pracy magisterskiej Temat : Badanie wydajności zapytań na przykładzie trzech komercyjnych baz danych Oracle, DB2 oarz SQL Server Promotor: dr inż. Michał Rudowski

19 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 19 Literatura C. Millsap, J. Holt: Optimizing Oracle performance, OReilly, 2003 B. Dageville, D. Das, K. Dias, K.Yagoube, M. Zait, M. Ziauddin: Automatic SQL Tuning in Oracle 10g, P. S. Sadore: How to write efficient SQK Queries with Tims & Tricks

20 Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, Politechnika Warszawska 20 Pytania


Pobierz ppt "Zapytania SQL: wydajność i optymalizacja Łukasz Twardokęs, SDM-2 2008."

Podobne prezentacje


Reklamy Google