Bazy danych 11. Algorytmy złaczeń. P. F. Góra

Podobne dokumenty
Bazy danych 8. Złaczenia ciag dalszy. Grupowanie.

Bazy danych 12. SQL To i owo. Algorytmy złaczeń.

Bazy danych 2. Relacyjny model baz danych

Bazy danych 5. Złaczenia. P. F. Góra

Bazy danych 7. Złaczenia

Bazy danych 10. Uzupełnienia i przykłady

Bazy danych 6. Klucze obce. P. F. Góra

Optymalizacja poleceń SQL Metody dostępu do danych

Bazy danych 9. SQL Klucze obce Transakcje

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Bazy danych 6. Podzapytania i grupowanie. P. F. Góra

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

Indeksowanie w bazach danych

Wykład 5. SQL praca z tabelami 2

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Bazy danych 12. SQL Wyszukiwanie pełnotekstowe

Bazy danych 5. SQL- złaczenia, podzapytania i grupowanie

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Wykład 8. SQL praca z tabelami 5

Bazy danych wykład dwunasty. dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36

Wykład 6. SQL praca z tabelami 3

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

INFORMATYKA GEODEZYJNO- KARTOGRAFICZNA Relacyjny model danych. Relacyjny model danych Struktury danych Operacje Oganiczenia integralnościowe

Relacyjne bazy danych. Podstawy SQL

Bazy danych 11. Kilka przykładów. P. F. Góra

Bazy danych 7. SQL podstawy

Wykład 05 Bazy danych

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Bazy danych 5. Samozłaczenie SQL podstawy

Język SQL, zajęcia nr 1

Zapytania, złączenia, optymalizacja zapytań, planowanie zapytań, optymalizacja indeksów.

Bazy danych 12. Bazy NoSQL. P. F. Góra

Bazy danych 9. Klucze obce Transakcje. P. F. Góra

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Bazy danych 10. SQL Widoki

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

Tabela wewnętrzna - definicja

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

3. Podzapytania, łączenie tabel i zapytań

Autor: Joanna Karwowska

Relacyjne bazy danych. Podstawy SQL

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Bazy danych 9. Klucze obce Transakcje

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Podstawy technologii WWW

Bazy danych 9. Indeksowanie

Internetowe bazy danych

Autor: Joanna Karwowska

Bazy danych. Dr inż. Paweł Kasprowski

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Bazy danych 4. SQL podstawy. P. F. Góra

Bazy danych 8. Podzapytania i grupowanie. P. F. Góra

Język SQL, zajęcia nr 2

Bazy danych Język SQL część 2 Wykład dla studentów matem

Model relacyjny. Wykład II

Systemy GIS Tworzenie zapytań w bazach danych

SQL SERVER 2012 i nie tylko:

Wykład 2. Relacyjny model danych

Bazy danych. dr inż. Arkadiusz Mirakowski

Optymalizacja zapytań. Proces przetwarzania i obliczania wyniku zapytania (wyrażenia algebry relacji) w SZBD

Bazy danych 2013/14. Egzamin. (5 pkt). Baza danych przechowuje w relacji binarnej G graf skierowany.

SIECI KOMPUTEROWE I BAZY DANYCH

Autor: Joanna Karwowska

Podstawowe zapytania SELECT (na jednej tabeli)

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

STROJENIE BAZ DANYCH: INDEKSY. Cezary Ołtuszyk coltuszyk.wordpress.com

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Bazy danych 7. Klucze obce Transakcje. P. F. Góra

Optymalizacja poleceń SQL

Wykład XII. optymalizacja w relacyjnych bazach danych

Fizyczna struktura bazy danych w SQL Serwerze

Wykład 4. SQL praca z tabelami 1

Wprowadzenie do baz danych

Język SQL. Rozdział 2. Proste zapytania

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

Technologie baz danych

Przestrzenne bazy danych Podstawy języka SQL

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

PLAN WYKŁADU BAZY DANYCH MODEL DANYCH. Relacyjny model danych Struktury danych Operacje Integralność danych Algebra relacyjna HISTORIA

STROJENIE PRZETWARZAŃ SAS

Haszowanie (adresowanie rozpraszające, mieszające)

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Bazy danych Wykład zerowy. P. F. Góra

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL.

Bazy danych. Plan wykładu. Przetwarzanie zapytań. Etapy przetwarzania zapytania. Translacja zapytań języka SQL do postaci wyrażeń algebry relacji

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

Grupowanie i funkcje agregacji

SQL/MySQL. Rafał Kern

Bazy danych 2. Algebra relacji Zależności funkcyjne

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Oracle PL/SQL. Paweł Rajba.

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

WPROWADZENIE DO BAZ DANYCH

Transkrypt:

Bazy danych 11. Algorytmy złaczeń P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2009

Typy złaczeń SELECT... FROM T 1 JOIN T 2 ON T 1.k p =T 2.k q JOIN T 3 ON T 2.k r =T 3.k s WHERE...; SELECT... FROM T 1 JOIN T 2 ON T 1.k p =T 2.k q JOIN T 3 ON T 1.k r =T 3.k s WHERE...; Każdy wierzchołek grafu reprezentuje tabelę, każda krawędź złaczenie JOIN... ON... Copyright c 2009,2010 P. F. Góra 11 2

Tego typu złaczenia drzewiaste, mogace obejmować kilka, kilkanaście, kilkadziesiat lub nawet więcej tabel, sa charakterystyczne dla złaczeń, które obejmuja dane z wielu tabel, porozdzielane pomiędzy nimi głównie ze względów normalizacyjnych. W SQL daje się jednak realizować także złaczenia o innej strukturze, w szczególności złaczenia, w których pojawiaja się cykle. Copyright c 2009,2010 P. F. Góra 11 3

Zupełnie inny typ złaczenia Przypuśćmy, że mamy trzy tabele z takimi oto przykładowymi danymi: mysql> SELECT * FROM T1; +------+------+ I J +------+------+ 1 1 2 1 3 2 +------+------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM T2; +------+------+ K L +------+------+ 1 A 2 B 3 C +------+------+ 3 rows in set (0.00 sec) mysql> SELECT * FROM T3; +------+------+ M N +------+------+ A 1 A 2 B 1 C 2 C 3 +------+------+ 5 rows in set (0.00 sec) Copyright c 2009,2010 P. F. Góra 11 4

Dla takich tabel można zaprojektować złaczenie zapętlone : mysql> SELECT Jeden.I AS I, Jeden.J AS J, K, L, M, N FROM T1 AS Jeden -> JOIN T2 ON Jeden.I=T2.K -> JOIN T3 ON T2.L=T3.M -> JOIN T1 As Dwa ON T3.N=Dwa.J -> WHERE Jeden.I=Dwa.I AND Jeden.J=Dwa.J; +------+------+------+------+------+------+ I J K L M N +------+------+------+------+------+------+ 1 1 1 A A 1 2 1 2 B B 1 3 2 3 C C 2 +------+------+------+------+------+------+ 3 rows in set (0.00 sec) Ponieważ tabela T1 występuje w tym złaczeniu dwa razy, każde wystapienie musi mieć unikalny alias. Warunek WHERE stanowi, że oba wystapienia tabeli T1 odnosza się do tych samych wierszy. Copyright c 2009,2010 P. F. Góra 11 5

Filtry Wyobraźmy sobie zapytanie SELECT... FROM T 1 JOIN T 2 ON... WHERE P(T 1 ) AND Q(T 2 ) AND R(T 1,T 2 ); Predykaty P i Q, działajace tylko na kolumnach tabel, odpowiednio, T 1 i T 2, sa filtrami, wybieraja bowiem pewne podzbiory wierszy tych tabel. Predykat R, działajacy na kolumnach obu tabel, można (i należy) traktować jako fragment warunku złaczenia (złaczenie theta). Im mniejszy procent wierszy wybiera z tabeli filtr, tym większa ma on selektywność. Dla efektywności złaczenia korzystne jest używanie filtru o największej selektywności możliwie najwcześniej. Copyright c 2009,2010 P. F. Góra 11 6

Jak baza danych realizuje złaczenia Złaczenia wewnętrzne zdefiniowane sa jako podzbiory iloczynu kartezjańskiego odpowiednich tabel, jednak na ogół nie sa one realizowane w ten sposób, iż najpierw wykonywany jest iloczyn kartezjański, potem zaś wybierane sa odpowiednie wiersze. Sposób realizacji złaczenia nie może wpłynać na ostateczny wynik zapytania, ale może wpłynać (i wpływa!) na czas realizacji zapytania, zajętość pamięci itp. Jak zatem baza danych realizuje złaczenie? Najczęściej używa się następujacych trzech algorytmów: Copyright c 2009,2010 P. F. Góra 11 7

1. Złaczenie pętli zagnieżdżonych (nested loops) 1. Baza przeglada pierwsza tabelę wejściowa. Wiersze nie spełniajace filtru nałożonego tylko na ta tabelę odrzuca, wiersze spełniajace filtr przekazuje dalej. 2. Do każdego wiersza z pierwszej tabeli dopasowywane sa wiersze z drugiej tabeli, spełniajace warunek złaczenia (złaczenie wewnętrzne) lub wartości NULL, jeśli wierwszy takowych nie ma (złaczenie zewnętrzne). Odrzucane sa wiersze nie spełniajace warunków dla dotychczas wykorzystanych tabel, czyli filtru dla drugiej tabeli i warunków obejmujacych łacznie pierwsza i druga tabelę. 3. Analogicznie postępujemy dla trzeciej i każdej następnej tabeli. Copyright c 2009,2010 P. F. Góra 11 8

Takie złaczenie ma postać zagnieżdżonych pętli najbardziej zewnętrzna o- biega pierwsza tabelę wejściowa, najbardziej wewnętrzna ostatnia. Z tego względu istotne jest, aby pierwsza, najbardziej zewnętrzna pętla, odrzucała możliwie dużo wierszy oraz żeby połaczenia następowały po kolumnach indeksowanych, wówczas bowiem łatwo jest znaleźć wiersze pasujace do aktualnego klucza złaczenia. Na każdym etapie wymagana jest jedynie informacja o aktualnie przetwarzanej pozycji oraz zawartość konstruowanego w danej chwili wiersza wynikowego cały proces nie wymaga dużej pamięci. Złaczenie pętli zagnieżdżonych może mieć warunki złaczenia w postaci nierówności. Wiele RDBMS wyraźnie preferuje ten typ złaczenia. Copyright c 2009,2010 P. F. Góra 11 9

2. Złaczenie haszujace (mieszajace, hash join) Stosuje się tylko do złaczeń wewnętrznych, w których warunki złaczenia maja postać równości. Teoretycznie jest to wówczas najszybszy algorytm złaczenia, ale praktycznie tak wcale nie musi być. Złaczane tabele przetwarzane sa niezależnie. Cały algorytm przebiega w dwu fazach: W fazie budowania dla mniejszej (po zastosowaniu filtru) tabeli tworzona jest tablica haszujaca (tablica mieszajaca, hash table), powstała przez zastosowanie funkcji haszujacej do kluczy złaczenia. Teoretycznie rozmieszcza on hasze przyporzadkowane różnym kluczom równomiernie w pamięci. Algorytm działa szczególnie szybko, jeśli cała tablica haszujaca mieści się w pamięci. Copyright c 2009,2010 P. F. Góra 11 10

W fazie wyszukiwania sekwencyjnie przegladana jest większa tabela. Na kluczu złaczenia każdego wiersza wykonywana jest ta sama funkcja haszujaca; jeżeli odpowiedni element znajduje się w tablicy haszujacej dla pierwszej tabeli, wiersze sa łaczone. Jeżeli nie, wiersz drugiej tabeli jest odrzucany. Jeżeli tablica haszujaca znajduje się w całości w pamięci, średni czas wyszukiwania elementów jest stały i niezależny od rozmiarów tablicy to właśnie stanowi o efektywności tego algorytmu. Copyright c 2009,2010 P. F. Góra 11 11

Problemy ze złaczeniem haszujacym Efektywność złaczenia haszujacego silnie zależy od doboru funkcji haszujacej. Idealna funkcja haszujaca ma tę własność, że zmiana pojedynczego bitu w kluczu, zmienia połowę bitów hasza, i zmiana ta jest niezależna od zmian spowodowanych przez zmianę dowolnego innego bitu w kluczu. Idealne funkcje haszujace sa trudne do zaprojektowania lub kosztowne obliczeniowo, stosuje się więc funkcje gorsze, co jednak prowadzić może do kolizji: Fukncja haszujaca dwóm różnym kluczom usiłuje przypisać tę sama wartość hasza. Aby tego uniknać, stosuje się różne techniki, co jednak powiększa koszt obliczeniowy algorytmu. Innym problemem jest grupowanie: Wbrew założeniom, funkcje haszujace maja tendencję do nierównomiernego rozmieszczania haszy w pamięci, co zmniejsza efektywnośc wykorzystania pamięci i powiększa czas wyszukiwania. Copyright c 2009,2010 P. F. Góra 11 12

3. Złaczenie sortujaco-scalaj ace (sort and merge) Tabele odczytuje się niezależnie i stosuje do nich właściwe filtry, po czym wynikowe zbiory wierszy sortuje się względem klucza złaczenia. Następnie dwie posortowane listy zostaja scalone. Baza danych odczytuje na przemian wiersze z każdej listy. Jeżeli warunek złaczenia ma postać równości, baza porównuje górne wiersze i odrzuca te, które znajduja się na posortowanej liście wcześniej niż górny wiersz drugiej tabeli, zwraca zaś te, które wzajemnie sobie odpowiadaja. Procedura scalania jest szybka, ale procedura wstępnego sortowania jest wolna, o ile nie ma gwarancji, że oba zbiory wierszy mieszcza się w pamięci. Copyright c 2009,2010 P. F. Góra 11 13

Uwaga! Jeżeli ze względów estetycznych lub innych wynikowy zbiór wierszy pewnego zapytania ma być posortowany, to jeśli ten wynikowy zbiór w całości nie mieści się w pamięci, może to znacznie spowolnić czas wykonywania zapytania. Copyright c 2009,2010 P. F. Góra 11 14

Wymuszanie kolejności wykonywania złaczeń Przypuśćmy, że łaczymy więcej niż dwie tabele i że warunek złaczenia ma postać... AND T 1.k 2 =T 2.k 2 AND T 1.k 3 =T 3.k 3... Chcemy wykonać pętle zagnieżdżone po tabelach T 1 i T 2 przed odwołaniem do tabeli T 3. Aby odroczyć wykonanie złaczenia, trzeba uczynić je zależnym od danych ze złaczenia, które powinno zostać wykonane wcześniej. Copyright c 2009,2010 P. F. Góra 11 15

... AND T 1.k 2 =T 2.k 2 AND T 1.k 3 +0*T 2.k 2 =T 3.k 3... Druga wersja jest logicznie równoważna pierwszej, jednak baza interpretujac je, po lewej stronie drugiego złaczenia trafia na wyrażenie, które zależy tak od tabeli T 1, jak i T 2 (nie ma znaczenia, że wartość z tabeli T 2 nie może wpłynać na wynik), nie wykona więc złaczenia z T 3 przed złaczeniem z T 2. Uwaga: Oczywiście to samo stosuje się do złaczeń sformułowanych w postaci... T 1 JOIN T 2 ON T 1.k 2 =T 2.k 2 JOIN T 3 ON T 1.k 3 =T 3.k 3... Copyright c 2009,2010 P. F. Góra 11 16

Indeksy mysql> CREATE TABLE popolupo -> (foo CHAR(8) NOT NULL PRIMARY KEY, -> bar CHAR(8) NOT NULL, -> liczba INT UNSIGNED, -> UNIQUE INDEX (bar,liczba), -> INDEX(liczba)); Query OK, 0 rows affected (0.83 sec) foo jest kluczem głównym, automatycznie indeksowanym. Na parze atrybutów (bar,liczba) założony jest dodatkowy indeks. Jest to indeks unikalny, to znaczy kombinacja wartości bar, liczba nie może się powtarzać. Ten indeks nie jest alternatywnym kluczem głownym, gdyż atrybut liczba nie ma kwalifikatora NOT NULL. Kolejny indeks założony jest na atrybucie liczba. Copyright c 2009,2010 P. F. Góra 11 17

W tej sytuacji legalne sa zapytania mysql> SELECT * FROM popolupo USE INDEX (bar,liczba) -> WHERE bar LIKE abc% AND liczba > 18; mysql> SELECT * FROM popolupo IGNORE INDEX (liczba); Copyright c 2009,2010 P. F. Góra 11 18