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



Podobne dokumenty
Wykład XII. optymalizacja w relacyjnych bazach danych

Teoretyczne podstawy informatyki

Fazy przetwarzania zapytania zapytanie SQL. Optymalizacja zapytań. Klasyfikacja technik optymalizacji zapytań. Proces optymalizacji zapytań.

Optymalizacja w relacyjnych bazach danych - wybór wydajnej strategii obliczania wyrażenia relacyjnego.

Bazy danych Algebra relacji Wykład dla studentów matematyki

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

Optymalizacja zapytań część I

RBD Relacyjne Bazy Danych

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

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

RBD Relacyjne Bazy Danych Więzy realcji

Bazy danych wykład drugi. Konrad Zdanowski

BAZY DANYCH algebra relacyjna. Opracował: dr inż. Piotr Suchomski

Podzapytania. SELECT atrybut_1, atrybut_2,... FROM relacja WHERE atrybut_n operator (SELECT atrybut_1, FROM relacja WHERE warunek

Bazy danych wykład ósmy Indeksy

Technologie baz danych

Bazy danych wykład trzeci. Konrad Zdanowski

Autor: Joanna Karwowska

Przestrzenne bazy danych Podstawy języka SQL

Optymalizacja poleceń SQL Wprowadzenie

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

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

Podstawy języka SQL cz. 2

Bazy danych wykład trzeci. trzeci Modelowanie schematu bazy danych 1 / 40

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

Oracle11g: Wprowadzenie do SQL

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Optymalizacja zapytań część II

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Bazy Danych egzamin 9 luty, 2012 rozwiazania

1 Wstęp do modelu relacyjnego

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

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

Bazy danych. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Język SQL. Rozdział 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Technologie baz danych

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

Hurtownie danych. Przetwarzanie zapytań. ZAPYTANIA NA ZAPLECZU

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

Systemy OLAP II. Krzysztof Dembczyński. Instytut Informatyki Zakład Inteligentnych Systemów Wspomagania Decyzji Politechnika Poznańska

Optymalizacja poleceń SQL Statystyki

Plan wykładu: Operacje relacji: suma, przekrój, różnica, złączenia proste, iloczyn kartezjański, złączenia teta.

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

BAZY DANYCH wprowadzenie do języka SQL. Opracował: dr inż. Piotr Suchomski

3. Podzapytania, łączenie tabel i zapytań

Wprowadzenie do baz danych

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

Indeksy w bazach danych. Motywacje. Techniki indeksowania w eksploracji danych. Plan prezentacji. Dotychczasowe prace badawcze skupiały się na

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

PLAN WYKŁADU BAZY DANYCH ETAPY PRZETWARZANIA ZAPYTANIA OPTYMALIZACJA ZAPYTAŃ

SQL (ang. Structured Query Language)

Administracja i programowanie pod Microsoft SQL Server 2000

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

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

METODY INŻYNIERII WIEDZY ASOCJACYJNA REPREZENTACJA POWIĄZANYCH TABEL I WNIOSKOWANIE IGOR CZAJKOWSKI

Podstawowe zapytania SELECT (na jednej tabeli)

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Model relacyjny. Wykład II

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

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

Rozpatrzymy bardzo uproszczoną bazę danych o schemacie

Tadeusz Pankowski

Optymalizacja poleceń SQL Metody dostępu do danych

Wykład 6. SQL praca z tabelami 3

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Relacyjny model danych

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Wprowadzenie do języka SQL

Podstawy programowania skrót z wykładów:

Autor: Joanna Karwowska

Zadanie 2: Arytmetyka symboli

Fazy przetwarzania polecenia SQL. Faza parsingu (2) Faza parsingu (1) Optymalizacja poleceń SQL Część 1.

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

Spis treści. Przedmowa

Wykład 5. SQL praca z tabelami 2

TEORETYCZNE PODSTAWY INFORMATYKI

wykład Organizacja plików Opracował: dr inż. Janusz DUDCZYK

TEORETYCZNE PODSTAWY INFORMATYKI

PODZAPYTANIE (SUBSELECT)

Optymalizacja zapytań

Wykład 1: Wskaźniki i zmienne dynamiczne

Data Mining Wykład 5. Indukcja drzew decyzyjnych - Indeks Gini & Zysk informacyjny. Indeks Gini. Indeks Gini - Przykład

Wymagania: Konstrukcja prostych zapytań w języku SQL, umiejętność wykorzystania funkcji wierszowych i agregujących.

Zaawansowane algorytmy i struktury danych

Haszowanie (adresowanie rozpraszające, mieszające)

Temat: Algorytm kompresji plików metodą Huffmana

Metody Rozmyte i Algorytmy Ewolucyjne

Bazy danych. Andrzej Łachwa, UJ, /15

Podstawy Programowania C++

BAZY DANYCH. Anomalie. Rozkład relacji i normalizacja. Wady redundancji

Style programowania - krótki przeglad

Aproksymacja funkcji a regresja symboliczna

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

Transkrypt:

Bazy danych wykład dwunasty Wykonywanie i optymalizacja zapytań SQL Konrad Zdanowski Uniwersytet Kardynała Stefana Wyszyńskiego, Warszawa dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36

Model kosztów Paremtry określajace rozmiar relacji R: B(R) liczba bloków jakie zajmuje R (będziemy zakładać, że relacja jest sklastrowana), T (R) liczba krotek w relacji R, V (R, A) liczba róznych wartości atrybutu A w R, V (R[a 1,..., a k ]) liczba róznych krotek o wartości atrybutów a 1,..., a k w R Szacujac koszty wykonania zapytania minimalizujemy liczbę operacji I/O. dwunasty Wykonywanie i optymalizacja zapytań SQL 2 / 36

Model kosztów Dla sklastrowanej relacji R koszt wczytania relacji to B(R). Koszt sortowania relacji R, jeśli ta mieści się w całości w pamięci operacyjnej, to również B(R). dwunasty Wykonywanie i optymalizacja zapytań SQL 3 / 36

Podstawowe operacje na relacjach przypomnienie Niech R(A 1,..., A k ), S(B 1,..., B n ) dane relacje. Rzutowanie π: A1,...,A m (R) = {(a 1,..., a m ) istnieją a m+1,..., a k, takie, że (a 1,..., a m, a m+1,..., a k ) R}. Oczywiście, możemy wybrać w rzutowaniu dowolne atrybuty. Dla warunku C na krotki relacji R, σ C (R) = {(a 1,..., a k ): C(a 1,..., a k )}. dwunasty Wykonywanie i optymalizacja zapytań SQL 4 / 36

Podstawowe operacje na relacjach przypomnienie Niech R(A, B, C, D), S(C, D, E) dane relacje. Złaczenie R S = {(a, b, c, d, e): (a, b, c, d) R (c, d, e) S}. Złaczenie warunkowe dla warunku Θ, R Θ S = {(a, b, c, d, e): (a, b, c, d) R (c, d, e) S Θ(a, b, c, d, e)}. dwunasty Wykonywanie i optymalizacja zapytań SQL 5 / 36

Koszt pewnych operacji jednoargumentowych Uwaga. Zajmiemy się kosztem operacji jednoprzebiegowych. Tzn. tylko raz wczytujemy dana krotkę i cały wynik albo zmieści się w pamięci operacyjnej albo możemy go generować online. Algorytm naiwny dla każdej nowej krotki sprawdzamy, czy już nie wystapiła ma koszt n 2 (dla n krotek wyniku to problem choć oczywiście nie zmieniamy ilości operacji I/O). Tablice z haszowaniem optymalizuja ten koszt wymagajac dodatkowej pamięci. Operacje agregujace możemy obliczać podczas tworzenia kolejnych krotek wynikowej relacji. dwunasty Wykonywanie i optymalizacja zapytań SQL 6 / 36

Koszt operacji dwuargumentowych Rozważmy operacje sumy, iloczyny, różnicy dla wielozbiorów i zbiorów (bez powtórzeń). Niech M liczba wolnych buforów w pamięci operacyjnej. Suma wielozbiorów dla relacji R i S to B(R) + B(S). Dla róznicy i iloczynu musimy wczytać mniejsza relację do pamięci operacyjnej, czyli musi być spełniony warunek min(b(r), B(S)) M( 1). Dla operacji na zbiorach (bez powtórzeń) musimy wczytać mniejsza relację i zarezerwować dodatkowa pamięć na struktury pomocnicze (jak tablice haszujace). W przybliżeniu mamy więc wymóg min(b(r), B(S)) M. dwunasty Wykonywanie i optymalizacja zapytań SQL 7 / 36

Koszt złaczenia Rozpatrzmy złaczenie R(A, B) S(B, C). Naiwny algorytm wymaga B(R)B(S) operacji wczytania. Jeśli mamy M buforów, możemy wczytywać po M 1 bloków relacji R i następnie wczytywać po jednym bloku z S aby stworzyć złaczenie. Koszt wyniesie około B(R)B(S)/M. dwunasty Wykonywanie i optymalizacja zapytań SQL 8 / 36

Koszt operacji dwuargumentowych Zauważmy, że koszt tych operacji możemy istotnie zmniejszyć przy zastosowaniu dodatkowyc struktur danych (np. tablic haszujacych, indeksów). Np. jeśli na B jest nałożony indeks w R lub S, możemy efektywnie znajdować krotki, które wejda do złaczenia. Koszt złaczenia będzie wtedy optymalny. dwunasty Wykonywanie i optymalizacja zapytań SQL 9 / 36

Przetważanie zapytania SQL Elementy procesu wykonywania zapytania: kompilacja zapytania (przedstawienie zapytania w optymalnej postaci logicznej, wykonywanie zapytania. Aby wykonanie przebiegło efektywnie potrzebujemy zdefiniować często dodatkowe struktury danych (np. indeksy). dwunasty Wykonywanie i optymalizacja zapytań SQL 10 / 36

Kompilowanie zapytania SQL Elementy procesu kompilowania zapytania: zapisanie zapytania w postaci wyrażenia algebry relacji (drzewo zapytania), wybranie optymalnej, z równoważnych, postaci zapytania, wybranie algorytmów przetważania bazy danych. Aby wykonanie przebiegło efektywnie potrzebujemy zdefiniować często dodatkowe struktury danych (np. indeksy). dwunasty Wykonywanie i optymalizacja zapytań SQL 11 / 36

Drzewo zapytania przykład select tytul from Ksiazki where rok == 2011; π tytul σ rok=2011 Ksiazki dwunasty Wykonywanie i optymalizacja zapytań SQL 12 / 36

Drzewo zapytania przykład select tytul from Ksiazki where rok = 2011 and wydawca = Znak ; Które z drzew da efektywniejsze wykonanie? π tytul π tytul σ rok=2011 σ rok=2011 rok= Znak σ rok= Znak Ksiazki Ksiazki Oba plany sa równoważne, bo σ C D (R) = σ C (σ D (R)). dwunasty Wykonywanie i optymalizacja zapytań SQL 13 / 36

Drzewo zapytania przykład select nazwisko, tytul from Ksiazki, Autorzy where Ksiazki.autor_id = Autorzy.id; π nazwisko, tytul σ Ksiazki.autor_id=Autorzy.id Ksiazki Autorzy dwunasty Wykonywanie i optymalizacja zapytań SQL 14 / 36

Drzewo zapytania przykład select nazwisko, tytul from Ksiazki, Autorzy where Ksiazki.autor_id = Autorzy.id and rok=2011; Które plan jest lepszy? Ci zmienia (prawdopodobna) obecność indeksu na atrybucie, po którym złaczamy? π nazwisko, tytul σ Ksiazki.autor_id=Autorzy.id rok=2011 Ksiazki Autorzy π nazwisko, tytul σ Ksiazki.autor_id=Autorzy.id σ rok=2011 Ksiazki Autorzy dwunasty Wykonywanie i optymalizacja zapytań SQL 15 / 36

Optymalizacja zapytania Stworzenie reprezentacji algebraicznej. Eliminacja (jeśli możliwa) podzapytań. Transformacje algebraiczne w algebrze relacji. Zdefiniowanie porzadku wykonywania złaczeń i innych operacji. Po tych krokach następuję wybór konkretnych algorytmów operujacych na bazie danych. dwunasty Wykonywanie i optymalizacja zapytań SQL 16 / 36

Analiza semantyczna zapytania Po stworzeniu reprezentacji algebraicznej możemy uprościć zapytanie korzystajac z praw logicznych oraz arytmetycznych. W szczególności możemy wyeliminowac warunki (i zapytania) sprzeczne. dwunasty Wykonywanie i optymalizacja zapytań SQL 17 / 36

Transformacja zapytania Korzystajac z praw algebry relacji możemy uprościć i zoptymalizować dane zapytanie Oprócz metod aksjomatycznych stosować można też analizy statystyczne, szacowanie kosztów w oparciu o statystyki działania bazy danych (pracochłonne i kosztowne). Operacje unarne (filtrujace) przesuwamy w dół drzewa zapytania. Operacje binarne przesuwamy w góre. Złaczenia najlepiej definiować na atrybutach, na których mamy zdefiniowany indeks. dwunasty Wykonywanie i optymalizacja zapytań SQL 18 / 36

Przykładowe prawa algebry relacji R (S T ) = (R S) T, R (S T ) = (R S) (R T ), σ C D (R) = σ C (σ D (R)) = σ C (R) σ D (R), σ C D (R) = σ C (R) σ D (R), dwunasty Wykonywanie i optymalizacja zapytań SQL 19 / 36

Przykładowe prawa algebry relacji σ C (R S) = σ C (R) S, jeśli C zawiera tylko predykaty z R to σ C (R S) = σ C (R) S, jeśli M = N Q, gdzie N to atrybuty z R a Q to atrybuty z S (i N i Q zawieraja atrybuty, po których obliczamy złaczenie), to π M (R S) = π N (R) π Q (S), jeśli M nie zawiera atrybutów Z, po których obliczamy złaczenie, to π M (R S) = π N Z (R) π Q Z (S). dwunasty Wykonywanie i optymalizacja zapytań SQL 20 / 36

Przykłady Niech dane R(A, B) i S(B, C). Czy lepsze jest σ A=a (R S) czy σ A=a (R) S? Czy lepsze jest σ A=a C=c (R S) czy σ A=a (R) σ C=c (S)? Czy σ A=a C=c (R S), czy σ A=a (R S) σ C=c (R S), czy (σ A=a (R) S) (R σ C=c (S)? Czy coś moga zmienić indeksy na atrybutacie C? dwunasty Wykonywanie i optymalizacja zapytań SQL 21 / 36

Optymalizacja podzapytań Podzapytanie wymaga obliczenia dla każdej krotki, która może należeć do wyniku. Trudno optymalizować razem zapytanie i podzapytanie. Optymalizujac je oddzielnie możemy pominać pewne możliwości uproszczenia. Zmniejszenie kosztów można (czasem) osiagn ać przez eleminacje podzapytania. dwunasty Wykonywanie i optymalizacja zapytań SQL 22 / 36

Przykład - optymalizacja podzapytań Jak zooptymalizować to zapytanie? select a. nazwisko, a. miasto from Autorzy a where a. rok_urodzenia >1980 and a. i d in ( select k. a u t o r _ i d from K s i a z k i k where k. rok_wydania < 2000 ) ; dwunasty Wykonywanie i optymalizacja zapytań SQL 23 / 36

Przykład - optymalizacja podzapytań select a. nazwisko, a. miasto from Autorzy a, K s i a z k i k where a. rok_urodzenia >1980 and k. rok_wydania < 2000 and a. i d = k. a u t o r _ i d ; dwunasty Wykonywanie i optymalizacja zapytań SQL 24 / 36

Przykład - optymalizacja podzapytań select a. nazwisko, a. miasto from Autorzy a where a. plec = F and k. rok_urodzenia <= ALL ( select b. rok_urodzenia from Autorzy b where b. plec = F and a. miasto_urodzenia = b. miasto_urodzenia ) ; dwunasty Wykonywanie i optymalizacja zapytań SQL 25 / 36

Przykład - optymalizacja podzapytań Obliczmy zbiór nie najmłodszych autorek: select a. nazwisko, a. miasto from Autorzy a where a. plec = F and k. rok_urodzenia > SOME ( select b. rok_urodzenia from Autorzy b where b. plec = F and a. miasto_urodzenia = b. miasto_urodzenia ) ; dwunasty Wykonywanie i optymalizacja zapytań SQL 26 / 36

Przykład - optymalizacja podzapytań Zoptymalizujmy ostatnie zapytanie: select a. nazwisko, a. miasto from Autorzy a, Autorzy b where a. plec = F and b. plec= F and a. miasto_urodzenia = b. miasto_urodzenia and a. rok_urodzenia > b. rok_urodzenia ; dwunasty Wykonywanie i optymalizacja zapytań SQL 27 / 36

Przykład - optymalizacja podzapytań Odejmijmy: ( select a. nazwisko, a. miasto from Autorzy a where a. plec = F ) except ( select a. nazwisko, a. miasto from Autorzy a, Autorzy b where a. plec = F and b. plec= F and a. miasto_urodzenia = b. miasto_urodzenia and a. rok_urodzenia > b. rok_urodzenia ; ) dwunasty Wykonywanie i optymalizacja zapytań SQL 28 / 36

Przesuwanie predykatów π nazwisko, tytul π nazwisko, tytul σ rok=2011 Ksiazki.autor_id=Autorzy.id Ksiazki.autor_id=Autorzy.id σ rok=2011 Autorzy Ksiazki Autorzy Ksiazki dwunasty Wykonywanie i optymalizacja zapytań SQL 29 / 36

Przesuwanie predykatów select w. nazwa, Min ( a. rok_urodzenia ) from Wydawnictwa w, Autorzy a where w. a u t o r _ i d = a. i d group by w. nazwa having Min ( a. rok_urodzenia ) <=1939; select w. nazwa, Min ( a. rok_urodzenia ) from Wydawnictwa w, Autorzy a where w. a u t o r _ i d = a. i d and a. rok_urodzenia <=1939 group by w. nazwa ; dwunasty Wykonywanie i optymalizacja zapytań SQL 30 / 36

Przesuwanie predykatów Czy tak też można? select w. nazwa, Min ( a. rok_urodzenia ) from Wydawnictwa w, Autorzy a where w. a u t o r _ i d = a. i d group by w. nazwa having Min ( a. rok_urodzenia ) >1939; select w. nazwa, Min ( a. rok_urodzenia ) from Wydawnictwa w, Autorzy a where w. a u t o r _ i d = a. i d and a. rok_urodzenia >1939 group by w. nazwa ; dwunasty Wykonywanie i optymalizacja zapytań SQL 31 / 36

Optymalizacja zapytania heurystyka Selekcje oparta na warunku, σ C (R) warto przenieść w dół drzewa, jeśli to możliwe. Podobnie postępujemy z projekcjami. Usuwanie powtórzeń często lepiej zrobić wyżej w drzewie (jeśli trzeba) aby operować na mniejszych relacjach. Przed złaczeniem lepiej wykonać selekcję na obu relacjach składowych (jeśli wogle chcemy wykonać selekcję). dwunasty Wykonywanie i optymalizacja zapytań SQL 32 / 36

Fizyczny plan realizacji zapytania Po dokonaniu optymalizacji logicznej trzeba wybrać algorytmy realizacji zapytania: kolejność wykonania operacji przemiennych jak złaczenia, sumy,..., algorytmy dla operatorów logicznych (haszowanie, zagnieżdżone pętle,... ), realizacja operatorów sortowania, grupowania,..., sposób przekazywania argumentów i wyników podzapytań (przez dysk, pamięć operacyjna, po jednej krotce,... ). dwunasty Wykonywanie i optymalizacja zapytań SQL 33 / 36

Szacowanie kosztów Aby wybrać odpowiednie algorytmu należy oszacować ich koszty, czyli przede wszystkim oszacować wielkość pośrednich wyników. Stosuje się tutaj: przewidywanie przypadków najgorszych, rachunek prawdopodobieństwa by wyliczyć oczekiwane wartości rozmiaru relacji obliczanie okresowo statystyk bazy danych. dwunasty Wykonywanie i optymalizacja zapytań SQL 34 / 36

Szacowanie kosztów rozmiar projekcji Jeśli dane maja rozkład jednostajny, to oczekiawna wielkość projekcji σ A=a (R) wynosi T (R)/V (R, A). W praktyce wiele danych ma np. rozkład Zipfa (np. rozmiar populacji miast - podzielony na przedziały). W rozkładzie Zipfa i-ta najczęstsza wartość występuje z częstotliwościa 1/ i. Otrzymujemy wtedy ciag stosunków częstości 1, 0.71, 0.58,... dwunasty Wykonywanie i optymalizacja zapytań SQL 35 / 36

Szacowanie kosztów Szacowanie rozmiaru sumy, iloczynu, różnicy dość łatwe choć niekoniecznie dokładne. Np. rozmiar różnicy R S zawiera się w T (R) a T (R) T (S). Średnio możemy przyjac (T (R) + (T (R) T (S)))/2 = T (R) T (S)/2. Złaczenie R(A, B) is S(B, C) może mieć w wyniku 0 krotek, T (R) krotek, jeśli B jest kluczem obcym w R pobieranym z S, rzędu T (R)T (S) krotek, jeśli wartość atrybutu B jest w obu relacjach taka sama i mało zmienna. Przy pewnych dodatkowych założeniach (V (R, B) V (S, B)) i V (R S, A) = V (R, A)) możemy szacować rozmiar złaczenia jako T (R)T (S)/ max(v (R, B), V (S, B)). dwunasty Wykonywanie i optymalizacja zapytań SQL 36 / 36