Połązenie () Optymlizj poleeń SQL zęść. Metody połązeń, metody sortowni, wskzówki Operj inrn zwsze udził iorą dwie tele, jedn zostje nzwn telą zewnętrzną, drug telą wewnętrzną. W przypdku poleeni łąząego więej niż dwie tele (np., i ), połązenie relizowne jest zwsze dl pry tel (np. z, wynik z, lo z i wynik z, itd.). Podstwowe zsdy: główn zsd: kolejność łązeni tel powinn jk njrdziej ogrnizć ziór rekordów optymliztor szuk w ziorze łązonyh tel tkih, któryh połązenie wyprodukuje rekord jeśli znjdzie, te tele są łązone n pozątku w przypdku połązeni zewnętrznego tel zewnętrzn jest umieszzn w kolejnośi z telą wewnętrzną Połązenie () lgorytm nested loops Relizowne przy użyiu jednego z lgorytmów: nested loops, sort merge, hsh join. Wyór lgorytmu zleży od: rozmiru teli, posti wrunku połązeniowego, spodziewnego rozmiru wyniku połązeni, dostępnośi i rozmiru oszru sortowni, wrtośi prmetru odzytu wielolokowego (_FILE_MULTILOK_RE_OUNT). w połązeniu ierze udził mł zęść rekordów relji, istnieje efektywn metod dostępu do dnyh relji wewnętrznej (indeks złożony n kolumnie w wrunku połązeniowym). Główny koszt koszt odzytu rekordów relji zewnętrznej i znlezieni odpowidjąyh rekordów relji wewnętrznej. lgorytm: Relj zewnętrzn Relj wewnętrzn W plnie wykonni relj zewnętrzn pond relją wewnętrzną: NESTE LOOPS relj_zewnętrzn relj_wewnętrzn d e d d e Wynik połązeni 4
lgorytm sort merge () lgorytm sort merge () łązone relje są niezleżne (rk połązeni kluzem oym), wrunek połązeniowy z opertormi: <, <=, >, >= (le nie!=) i duże rozmiry łązonyh relji (zhowuje się lepiej niż nested loop), relj już są posortowne lu nie m potrzey relizji sortowni (o np. istnieje odpowiedni indeks). Główny koszt koszt wzytni ou relji do pmięi i ih posortowni. rk podziłu n relję zewnętrzną i wewnętrzną. lgorytm:. Posortownie ou relji ze względu n wrtośi kolumn w wrunku połązeniowym.. Połązenie rekordów o tyh smyh wrtośih kolumn w wrunku połązeniowym. sortownie złązenie d e e d e d d 5 6 lgorytm hsh join () lgorytm hsh join () wrunek połązeniowy jest wrunkiem równośiowym, i łązone relje o dużym rozmirze lu większ zęść rekordów mniejszej relji ierze udził w połązeniu. Główny koszt zudownie teli hszowej dl relji zewnętrznej i odzyt rekordów z relji wewnętrznej. Relj zewnętrzn mniejsz z relji, njlepiej, jeśli mieśi się w pmięi. W plnie wykonni pierwsz relj, z której zudowno tlię hszową: HSH JOIN relj_zewnętrzn relj_wewnętrzn lgorytm: Relj zewnętrzn FH Tli hszow 0 Funkj_hszują= kolumn_połązeniow mod Relj wewnętrzn d e d d e Wynik 7 8
Operje sortowni () Operje sortowni () SORT ORER Y gdy w poleeniu wyrżenie ORER Y. SORT (HSH) UNIQUE gdy w poleeniu użyto kluzuli ISTINT. SELET * FROM zespoly ORER Y dres ES; SELET ISTINT ett FROM prowniy; SORT GGREGTE gdy w poleeniu wylizn funkji grupow n łym ziorze rekordów. SELET MX(ztrudniony) FROM prowniy; Uwg! Nie możn zkłdć uzyskni posortownego zioru rekordów przy operjh GROUP Y i ISTINT. SORT JOIN przy wykonywniu operji połązeni wg lgorytmu sort merge. SORT (HSH) GROUP Y gdy w poleeniu wylizn funkji grupow dl kilku grup rekordów. SELET ett, VG(pl_pod) FROM prowniy GROUP Y ett; SELET * FROM prowniy JOIN etty ON pl_pod etween pl_min nd pl_mx; 9 0 Zmienne wiązni w poleeniu SQL () Zmienne wiązni w poleeniu SQL () Pozwlją n sprmetryzownie poleeni SQL> vrile zespol numer; SQL> exe :zespol := 0 Proedur PL/SQL zostł zkońzon pomyślnie. SQL> print :zespol ZESPOL ------ 0 SQL> SELET ount(*) FROM PROWNIY WHERE id_zesp = :zespol; OUNT(*) -------- SQL> exe :zespol := 0 Proedur PL/SQL zostł zkońzon pomyślnie. SQL> SELET ount(*) FROM PROWNIY WHERE id_zesp = :zespol; OUNT(*) -------- 7 Umożliwiją wielokrotne użyie tego smego plnu wykonni przy kolejnyh wywołni poleeni z różnymi wrtośimi zmiennej wiązni tzw. współdzielenie kursor (domyślne dziłnie) Przy pierwszym wywołniu poleeni ze zmienną wiązni optymliztor spogląd n wrtość zmiennej elem wygenerowni optymlnego plnu Prolem kolejne wywołni tego smego poleeni z innymi wrtośimi dl zmiennej wiązni mogą przetwrzć dne o innej hrkterystye niż te z pierwszego wywołni Rozwiąznie optymliztor oserwuje kolejne wywołni i podejmuje deyzje, zy dl kolejnego wywołni poleeni z inną wrtośią zmiennej wiązni wygenerowć nowy pln Efekt yć może wiele plnów wykonni dl tego smego poleeni
Wskzówki () Wskzówki () Wskzówki (ng. hints) umożliwiją określenie ezpośrednio w poleeniu nstępująyh elementów pry optymliztor: elu optymlizji, śieżki dostępu do dnyh, kolejnośi łązonyh relji przy operji połązeni, sposou relizji połązeni Wskzówki umieszz się w komentrzu ezpośrednio po kluzulh SELET, INSERT, UPTE, ELETE, przy zym pierwszym znkiem wskzówki musi yć + (plus). SELET /*+ wskzówk */ FROM ; SELET --+ wskzówk FROM ; Wyór elu optymlizji: LL_ROWS przepustowość, FIRST_ROWS zs odpowiedzi (wyofywn od Orle0g), FIRST_ROWS(n) zs odpowiedzi (pierwszyh n krotek). Sposó dostępu do dnyh: FULL (tel) pełne przeglądnięie teli, INEX (tel [indeks]) dostęp z pomoą indeksu, NO_INEX(tel [indeks]) zkznie użyi indeksu, INEX_OMINE (tel [indeks]) dostęp z pomoą indeksu itmpowego, INEX_ES (tel [indeks]) dostęp z pomoą odwróonego przeszukiwni indeksu, Uwg! łędnie sformułown wskzówk nie powoduje łędu wykonni poleeni jest ignorown! 4 Wskzówki () Wskzówki (4) Sposó dostępu do dnyh (d): INEX_FFS (tel [indeks]) dostęp z pomoą szykiego przeszukni indeksu, NO_INEX_FFS(tel [indeks]) zkznie użyi szykiego przeszukni indeksu, INEX_SS (tel [indeks]) dostęp z pomoą przeglądnięi indeksu z pominięiem kolumn, NO_INEX_SS (tel [indeks]) zkznie użyi przeglądnięi indeksu z pominięiem kolumn, INEX_JOIN (tel [indeks] ) wykonnie połązeni indeksów, Kolejność łązeni relji: LEING(tel tel...) określ ziór tel, które mją yć łązone jko pierwsze, ORERE określ, że tele mją yć łązone w tkiej kolejnośi, jk zostły wymienione w kluzuli FROM. 5 lgorytm łązeni relji: USE_NL(tel_wewnętrzn...) - połązenie NESTE LOOPS USE_HSH (tel_wewnętrzn...) - połązenie HSH JOIN USE_MERGE (tel tel...) - połązenie SORT MERGE NO_USE_NL(...), NO_USE_HSH(...), NO_USE_MERGE(...) zkz użyi odpowiedniego lgorytmu. Inne: USE_ONT wymuszenie zstąpieni zpytni z wrunkiem złożonym z opertorem OR przez kilk zpytń, połązonyh opertorem UNION_LL, NO_EXPN zronienie wykonni powyższej trnsformji. NO_QUERY_TRNSFORMTION zkznie wszystkih trnsformji poleeni (przed udową plnu wykonni) YNMI_SMPLING(tel poziom_prókowni) określenie poziomu dynmiznego prókowni (wyższy poziom większy zkres prókowni, zkres: 0-0) 6
Wskzówki (5) Łązenie wskzówek: SELET /*+ LEING(p e) USE_MERGE(p e z) */ * FROM prowniy p NTURL JOIN zespoly z JOIN ETTY e ON pl_pod etween pl_min nd pl_mx WHERE nzw = 'LGORYTMY'; 7