Zapytania SQL: wydajność i optymalizacja

Slides:



Advertisements
Podobne prezentacje
Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP.
Advertisements

Strojenie SQL w bazie Oracle
Indeksy w bazie danych Oracle
Podział i zastosowanie
Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
Rafał Hryniów Tomasz Pieciukiewicz
Bazy danych i inżynieria oprogramowania
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Bazy danych 8. SQL podstawy P. F. Góra semestr letni 2004/05.
Język SQL ma ciekawe możliwości tworzenia zapytań
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
Wycofywanie potwierdzonych transakcji
Język SQL – zapytania zagnieżdżone (podzapytania)
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 8: Perspektywy i sekwencery.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 3: Język bazy danych - SQL Funkcje grupowe.
WekaSQL Język i aplikacja przetwarzania oraz eksploracji danych.
Co to jest studium przypadku?
Procesor tekstu Word część 2
WYZWALACZE (TRIGGERY) Wyzwalacz jest specjalnym rodzajem procedury składowanej, która może być wykonana w odpowiedzi na jedną z trzech sytuacji: UPDATE.
SQL-owskie szlaki górskie
SQLDziałanie select * from tab_kredyt wyświetla wszystko z tab_kredyt select Kredytobiorca, Bank, rodzaj, data_zawarcia, klasyfikacja from tab_kredyt.
SQL select kredytobiorca,bank, rodzaj, data_zawarcia, klasyfikacja,kwota, terminzapadalnosci-data_zawarcia iledni from tab_kredyt where (terminzapadalnosci-data_zawarcia)>1095.
Wykład 8 Wojciech Pieprzyca
BD-LAB6 Wojciech Pieprzyca
Wykład 5 Wojciech Pieprzyca
Projektowanie fizycznej bazy danych
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Relacyjne Bazy Danych (Oracle) Prezentacja jest współfinansowana.
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Relacyjne Bazy Danych (Oracle) Prezentacja jest współfinansowana.
Rozproszone bazy danych – 1 Replikacja danych
Język SQL – ciąg dalszy DML (Data Manipulation Language)
Język SQL (Structured Query Language) DDL (Data Definition Language)
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
Multimedialne bazy danych
Autor: Maciej Piwowarczyk
Autor: Maciej Piwowarczyk
Structured Query Language
OPERACJA DZIELENIA W SQL
MS ACCESS Kwerendy.
TBD - SQL S ERVER 2012 DLA DEVELOPERA CZYLI A DALI TAM COŚ FAJNEGO ? Michał Grodzicki MCTS SQL SERVER lipca 2012.
SQL – zapytania posumowanie
TBD - P ERFORMANCE W BAZACH M ICROSOFT SQL S ERVER, CZYLI O CO W TYM W OGÓLE CHODZI Michał Grodzicki MCTS SQL SERVER lipca 2012.
SQL – Structured Query Language (3)
Przetwarzanie w oknie - nowa siła zapytań
MySQL – ODBC - ACCESS.
Delphi i Acad cd.. l_poz := MSpace.Count; Label3.Caption:=IntToStr(l_poz); ent:=Mspace.Item(0); for l_poz := 0 to MSpace.Count-1 do begin; ent:=Mspace.Item(l_poz);
Bazy danych podstawowe pojęcia
MySQL bazy danych dla witryny
Andrzej Macioł Bazy danych – SQL – cz. 1. Andrzej Macioł Składowe SZBD Jądro SZBD realizuje podstawowe funkcje związane z przechowywaniem danych, kontrolą
SQL - Structured Query Language
Autor: Joanna Barańska Promotor: dr inż. Paweł Figat Konsultant:
Bazy danych Microsoft access 2007.
PL/SQL – dalsza wędrówka
Język manipulacji danymi – SQL cz. I
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Wykład II Język SQL – polecenia DQL Powtórzenie wiadomości – cz. 1
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
1 SBD, L.Banachowski Zaawansowane cechy SQL Powtórzenie wyk ł adu 5.
Autor: Damian Urbańczyk
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 5: Operatory zbiorowe.
Język SQL – polecenie Select
1 Instrukcja SELECT : SELECT[DISTINCT  ALL] {*  [wyrażenie_kolumnowe [AS nowa_nazwa]],[…]} FROMNazwaTabeli [alias],[...] [WHEREwarunek_selekcji_wierszy]
Optymalizacja zapytań w SQL Server
Widoki (views) - Perspektywy:
Session will begin very soon :)
Strukturalny język zapytań SQL - historia
Testowanie baz danych - fakty i mity
Zapis prezentacji:

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

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

Wydajność systemu Oracle Na podstawie: C. Millsap J. Holt Optimizing Oracle Performance

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

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

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

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 )

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’ )

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’) )

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’

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

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%’

Struktury fizyczne poprawiające wydajność Indeksy B-drzewa Bitmapowe … Partycje Range List Hash Widoki zmaterializowane Jednopoziomowe partycjonowanie Partycjonowanie złożone

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

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

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

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

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

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

Pytania