background image

(c) Instytut Informatyki Politechniki Poznańskiej 

1

Optymalizacja polece

ń

 SQL

Cz

ęść

 3.

Metody poł

ą

cze

ń

,

metody sortowania, wskazówki

(c) Instytut Informatyki Politechniki Poznańskiej 

2

Poł

ą

czenie (1)

Operacja binarna – zawsze udział bior

ą

 dwie tabele, jedna zostaje 

nazwana tabel

ą

 zewn

ę

trzn

ą

, druga tabel

ą

 wewn

ę

trzn

ą

.

W przypadku polecenia ł

ą

cz

ą

cego wi

ę

cej ni

ż

 dwie tabele (np. A , B i 

C), poł

ą

czenie realizowane jest zawsze dla pary tabel (np. A z B, 

wynik z C, albo A z C i wynik z B, itd.).

Podstawowe zasady:

• główna zasada: kolejno

ść

 ł

ą

czenia tabel powinna jak najbardziej 

ogranicza

ć

 zbiór rekordów

• optymalizator szuka w zbiorze ł

ą

czonych tabel takich, których 

poł

ą

czenie wyprodukuje 1 rekord – je

ś

li znajdzie, te tabele s

ą

 

ł

ą

czone na pocz

ą

tku

• w przypadku poł

ą

czenia zewn

ę

trznego tabela zewn

ę

trzna jest 

umieszczana w kolejno

ś

ci za tabel

ą

 wewn

ę

trzn

ą

(c) Instytut Informatyki Politechniki Poznańskiej 

3

Poł

ą

czenie (2)

Realizowane przy u

ż

yciu jednego z algorytmów:

• nested loops,

• sort merge,

• hash join.

Wybór algorytmu zale

ż

y od:

• rozmiaru tabeli,

• postaci warunku poł

ą

czeniowego,

• spodziewanego rozmiaru wyniku poł

ą

czenia,

• dost

ę

pno

ś

ci i rozmiaru obszaru sortowania,

• warto

ś

ci parametru odczytu wieloblokowego 

(DB_FILE_MULTIBLOCK_READ_COUNT).

(c) Instytut Informatyki Politechniki Poznańskiej 

4

Algorytm nested loops

Stosowany, gdy:

• w poł

ą

czeniu bierze udział mała cz

ęść

 rekordów relacji,

• istnieje efektywna metoda dost

ę

pu do danych relacji wewn

ę

trznej 

(indeks zało

ż

ony na kolumnie w  warunku poł

ą

czeniowym).

Główny koszt – koszt odczytu rekordów relacji zewn

ę

trznej i 

znalezienia odpowiadaj

ą

cych rekordów relacji wewn

ę

trznej.

Algorytm:

W planie wykonania
relacja zewn

ę

trzna

ponad relacj

ą

 wewn

ę

trzn

ą

:

NESTED LOOPS

relacja_zewn

ę

trzna

relacja_wewn

ę

trzna

A
B
C
D

3
2
1
3

2

2
1

1
2

2
3

3

a

a
b

b
c

c
d

d

1

1

e

e

A
B
B
C

3
2
2
1

C

1

D

3

3
2
2
1

d
a
c
b

1

e

3

d

Relacja zewn

ę

trzna

Relacja wewn

ę

trzna

Wynik poł

ą

czenia

background image

(c) Instytut Informatyki Politechniki Poznańskiej 

5

Algorytm sort merge (1)

Stosowany, gdy:

ł

ą

czone relacje s

ą

 niezale

ż

ne (brak poł

ą

czenia kluczem obcym),

warunek poł

ą

czeniowy z operatorami: <, <=, >, >= (ale nie !=) i du

ż

rozmiary ł

ą

czonych relacji (zachowuje si

ę

 lepiej ni

ż

 nested loop),

relacja ju

ż

 s

ą

 posortowane lub nie ma potrzeby realizacji sortowania 

(bo np. istnieje odpowiedni indeks).

Główny koszt – koszt wczytania obu relacji do pami

ę

ci i ich 

posortowania.

Brak podziału na relacj

ę

 zewn

ę

trzn

ą

 i wewn

ę

trzn

ą

.

Algorytm:

1. Posortowanie obu relacji ze wzgl

ę

du na warto

ś

ci kolumn w warunku 

poł

ą

czeniowym.

2. Poł

ą

czenie rekordów o tych samych warto

ś

ciach kolumn w warunku 

poł

ą

czeniowym.

(c) Instytut Informatyki Politechniki Poznańskiej 

6

A

A
B

B
C

C
D

D

3

3
2

2
1

1
3

3

2

2
1

1
2

2
3

3

a

a
b

b
c

c
d

d

1

1

e

e

C

C
B

B
A

A
D

D

1

1
2

2
3

3
3

3

1

1
1

1
2

2
2

2

b

b
e

e
a

a
c

c

3

3

d

d

sortowanie

ą

czenie

C

C
C

C
B

B
B

B

1

1
1

1
2

2
2

2

A

A

3

3

D

D

3

3

1

1
1

1
2

2
2

2

b

b
e

e
a

a
c

c

3

3

d

d

3

3

d

d

Algorytm sort merge (2)

(c) Instytut Informatyki Politechniki Poznańskiej 

7

Algorytm hash join (1)

Stosowany, gdy:

• warunek poł

ą

czeniowy jest warunkiem równo

ś

ciowym, i

• ł

ą

czone relacje o du

ż

ym rozmiarze lub wi

ę

ksza cz

ęść

 rekordów 

mniejszej relacji bierze udział w poł

ą

czeniu.

Główny koszt – zbudowanie tabeli haszowej dla relacji zewn

ę

trznej i 

odczyt rekordów z relacji wewn

ę

trznej.

Relacja zewn

ę

trzna – mniejsza z relacji, najlepiej, je

ś

li mie

ś

ci si

ę

 w 

pami

ę

ci.

W planie wykonania pierwsza relacja, z której zbudowano tablic

ę

 

haszow

ą

:

HASH JOIN

relacja_zewn

ę

trzna

relacja_wewn

ę

trzna

(c) Instytut Informatyki Politechniki Poznańskiej 

8

Algorytm hash join (2)

Algorytm:

A

A
B

B
C

C
D

D

3

3
2

2
1

1
3

3

2

2
1

1
2

2
3

3

a

a
b

b
c

c
d

d

1

1

e

e

F

H

A

A

3

3

B

B

2

2

C

C

1

1

D

D

3

3

0

1

2

B

B
C

C
B

B
A

A

2

2
1

1
2

2
3

3

D

D

3

3

C

C

1

1

2

2
1

1
2

2
3

3

a

a
b

b
c

c
d

d

3

3

d

d

1

1

e

e

Funkcja_haszuj

ą

ca=

kolumna_poł

ą

czeniowa mod 3

Relacja zewn

ę

trzna

Relacja wewn

ę

trzna

Wynik

Tablica haszowa

background image

(c) Instytut Informatyki Politechniki Poznańskiej 

9

SORT ORDER BY – gdy w poleceniu wyra

ż

enie ORDER BY.

SORT AGGREGATE – gdy w poleceniu wyliczana funkcji grupowa 
na całym zbiorze rekordów.

SORT (HASH) GROUP BY – gdy w poleceniu wyliczana funkcji 
grupowa dla kilku grup rekordów.

SELECT FROM zespoly
ORDER BY adres DESC;

SELECT MAX(zatrudniony)

FROM pracownicy;

SELECT etat, AVG(placa_pod)

FROM pracownicy GROUP BY etat;

Operacje sortowania (1)

(c) Instytut Informatyki Politechniki Poznańskiej 

10

SORT (HASH) UNIQUE – gdy w poleceniu u

ż

yto klauzuli DISTINCT.

Uwaga!

Nie mo

ż

na zakłada

ć

 uzyskania posortowanego zbioru rekordów 

przy operacjach GROUP BY i DISTINCT.

SORT JOIN – przy wykonywaniu operacji poł

ą

czenia wg algorytmu 

sort merge.

SELECT *

FROM pracownicy JOIN etaty ON placa_pod between 
placa_min and placa_max;

SELECT DISTINCT etat

FROM pracownicy;

Operacje sortowania (2)

Zmienne wi

ą

zania w poleceniu SQL (1)

Pozwalaj

ą

 na „sparametryzowanie” polecenia

(c) Instytut Informatyki Politechniki Poznańskiej 

11

SQL> variable zespol number;

SQL> exec :zespol := 10

Procedura PL/SQL została zako

ń

czona pomy

ś

lnie.

SQL> print :zespol

ZESPOL

------

10

SQL> SELECT count(*) FROM PRACOWNICY WHERE id_zesp = :zespol;

COUNT(*)

--------

2

SQL> exec :zespol := 20

Procedura PL/SQL została zako

ń

czona pomy

ś

lnie.

SQL> SELECT count(*) FROM PRACOWNICY WHERE id_zesp = :zespol;

COUNT(*)

--------

7

Zmienne wi

ą

zania w poleceniu SQL (2)

Umo

ż

liwiaj

ą

 wielokrotne u

ż

ycie tego samego planu wykonania przy 

kolejnych wywołania polecenia z ró

ż

nymi warto

ś

ciami zmiennej 

wi

ą

zania – tzw. „współdzielenie kursora” (domy

ś

lne działanie)

Przy pierwszym wywołaniu polecenia ze zmienn

ą

 wi

ą

zania 

optymalizator „spogl

ą

da” na warto

ść

 zmiennej celem 

wygenerowania optymalnego planu

Problem – kolejne wywołania tego samego polecenia z innymi 
warto

ś

ciami dla zmiennej wi

ą

zania mog

ą

 przetwarza

ć

 dane o 

innej 

charakterystyce

ni

ż

 te z pierwszego wywołania

Rozwi

ą

zanie – optymalizator obserwuje kolejne wywołania i 

podejmuje decyzje, czy dla kolejnego wywołania polecenia z inn

ą

 

warto

ś

ci

ą

 zmiennej wi

ą

zania wygenerowa

ć

 nowy plan

Efekt – by

ć

 mo

ż

e wiele planów wykonania dla tego samego 

polecenia

(c) Instytut Informatyki Politechniki Poznańskiej 

12

background image

(c) Instytut Informatyki Politechniki Poznańskiej 

13

Wskazówki (1)

Wskazówki (ang. hints) umo

ż

liwiaj

ą

 okre

ś

lenie bezpo

ś

rednio w 

poleceniu nast

ę

puj

ą

cych elementów pracy optymalizatora:

• celu optymalizacji,

ś

cie

ż

ki dost

ę

pu do danych,

• kolejno

ś

ci ł

ą

czonych relacji przy operacji poł

ą

czenia,

• sposobu realizacji poł

ą

czenia

Wskazówki umieszcza si

ę

 w komentarzu bezpo

ś

rednio po 

klauzulach SELECT, INSERT, UPDATE, DELETE, przy czym 
pierwszym znakiem wskazówki musi by

ć

 + (plus).

Uwaga! Bł

ę

dnie sformułowana wskazówka nie powoduje bł

ę

du 

wykonania polecenia – jest ignorowana!

SELECT 

/*+ wskazówka */

… FROM …;

SELECT

--+ wskazówka

… FROM …;

(c) Instytut Informatyki Politechniki Poznańskiej 

14

Wskazówki (2)

Wybór celu optymalizacji:

• ALL_ROWS

– przepustowo

ść

,

• FIRST_ROWS

– czas odpowiedzi (wycofywana od Oracle10g),

• FIRST_ROWS(n)

– czas odpowiedzi (pierwszych n krotek).

Sposób dost

ę

pu do danych:

FULL 

(tabela) – pełne przegl

ą

dni

ę

cie tabeli,

• INDEX

(tabela [indeks]) – dost

ę

p za pomoc

ą

 indeksu,

• NO_INDEX

(tabela [indeks]) – zakazanie u

ż

ycia indeksu,

• INDEX_COMBINE

(tabela [indeks]) – dost

ę

p za pomoc

ą

 indeksu 

bitmapowego,

• INDEX_DESC

(tabela [indeks]) – dost

ę

p za pomoc

ą

 odwróconego 

przeszukiwania indeksu,

(c) Instytut Informatyki Politechniki Poznańskiej 

15

Wskazówki (3)

Sposób dost

ę

pu do danych (cd):

• INDEX_FFS

(tabela [indeks]) – dost

ę

p za pomoc

ą

 szybkiego 

przeszukania indeksu,

• NO_INDEX_FFS

(tabela [indeks]) – zakazanie u

ż

ycia szybkiego 

przeszukania indeksu, 

• INDEX_SS

(tabela [indeks]) – dost

ę

p za pomoc

ą

 przegl

ą

dni

ę

cia indeksu 

z pomini

ę

ciem kolumn,

• NO_INDEX_SS 

(tabela [indeks]) – zakazanie u

ż

ycia przegl

ą

dni

ę

cia 

indeksu z pomini

ę

ciem kolumn,

• INDEX_JOIN

(tabela [indeks] …) – wykonanie poł

ą

czenia indeksów,

Kolejno

ść

 ł

ą

czenia relacji:

• LEADING

(tabela1 tabela2 ...) – okre

ś

la zbiór tabel, które maj

ą

 by

ć

 

ł

ą

czone jako pierwsze,

• ORDERED

– okre

ś

la, 

ż

e tabele maj

ą

 by

ć

 ł

ą

czone w takiej kolejno

ś

ci, jak 

zostały wymienione w klauzuli FROM.

(c) Instytut Informatyki Politechniki Poznańskiej 

16

Wskazówki (4)

Algorytm ł

ą

czenia relacji:

• USE_NL

(tabela_wewn

ę

trzna ...) - poł

ą

czenie NESTED LOOPS

• USE_HASH

(tabela_wewn

ę

trzna ...) - poł

ą

czenie HASH JOIN

• USE_MERGE

(tabela1 tabela2 ...) - poł

ą

czenie SORT MERGE

• NO_USE_NL

(...), 

NO_USE_HASH

(...), 

NO_USE_MERGE

(...) – zakaz 

u

ż

ycia odpowiedniego algorytmu.

Inne:

• USE_CONCAT

– wymuszenie zast

ą

pienia zapytania z warunkiem 

zło

ż

onym z operatorem OR przez kilka zapyta

ń

, poł

ą

czonych 

operatorem UNION_ALL,

• NO_EXPAND

– zabronienie wykonania powy

ż

szej transformacji.

• NO_QUERY_TRANSFORMATION 

– zakazanie wszystkich transformacji 

polecenia (przed budow

ą

 planu wykonania)

• DYNAMIC_SAMPLING

(tabela poziom_próbkowania) – okre

ś

lenie 

poziomu dynamicznego próbkowania (wy

ż

szy poziom – wi

ę

kszy zakres  

próbkowania, zakres: 0-10)

background image

(c) Instytut Informatyki Politechniki Poznańskiej 

17

Wskazówki (5)

Ł

ą

czenie wskazówek:

SELECT /*+ LEADING(p e) USE_MERGE(p e z) */ *
FROM pracownicy p NATURAL JOIN zespoly z JOIN ETATY e
ON placa_pod between placa_min and placa_max
WHERE nazwa = 'ALGORYTMY';