Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Zapytania SQL: wydajność i optymalizacja

Podobne prezentacje


Prezentacja na temat: "Zapytania SQL: wydajność i optymalizacja"— Zapis prezentacji:

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

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 Wydajność systemu Oracle
Na podstawie: C. Millsap J. Holt Optimizing Oracle Performance

4 Metody dostępu do tabel
pełny przegląd tabeli dostęp przez ROWID

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 – dobre praktyki (1)
Należy unikać * w klauzuli SELECT Wykorzystywanie klauzuli WHERE zamiast HAVING 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 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

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 – 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 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 AND s.kod = ‘MZ’ )

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 – wykorzystanie indeksów (1)
obliczenia na indeksowanej kolumnie blokują korzystanie z indeksu konkatenacja indeksowanych kolumn 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 – wykorzystanie indeksów (2)
zastosowanie funkcji na indeksowanej kolumnie niejawna konwersja typów SELECT … FROM sklep s WHERE UPPER(s.nazwa) = ‘SUPERSAM’ SELECT … FROM sklep s WHERE s.nazwa = ‘SUPERSAM’ 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

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 Struktury fizyczne poprawiające wydajność
Indeksy B-drzewa Bitmapowe Partycje Range List Hash Widoki zmaterializowane Jednopoziomowe partycjonowanie Partycjonowanie złożone

14 Automatyczne strojenie zapytań
Oracle – SQL Tuning Advisor oraz SQL Access Advisor DB2 – DB2 Design Advisor SQL Server – Database Tuning Advisor

15 Przykład interfejsu – Oracle (1)
Rysunek 1. Uruchomienie SQL Tuning Advisor

16 Przykład interfejsu – Oracle (2)
Rysunek 2. Wynik działania SQL Tuning Advisor

17 Przykład interfejsu – Oracle (3)
Rysunek 3. Nowy plan zapytania po implementacji wskazówki SAL Tuning Advisor

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 Literatura C. Millsap, J. Holt: Optimizing Oracle performance, O’Reilly, 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 Pytania


Pobierz ppt "Zapytania SQL: wydajność i optymalizacja"

Podobne prezentacje


Reklamy Google