19OptymalizacjaSQL czesc 3id 18609

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

ż

e

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';


Wyszukiwarka

Podobne podstrony:
19OptymalizacjaSQL czesc 2 zadania
19OptymalizacjaSQL czesc 3
19OptymalizacjaSQL czesc 2 zadaniaid 18608
19OptymalizacjaSQL czesc 1 zadania
19OptymalizacjaSQL czesc 2
19OptymalizacjaSQL czesc 2id 18607
88 Leki przeciwreumatyczne część 2
guzy część szczegółowa rzadsze
Stomatologia czesc wykl 12
S II [dalsza część prezentacji]
(65) Leki przeciwreumatyczne (Część 1)
Teoria organizacji i kierowania w adm publ prezentacja czesc o konflikcie i zespolach dw1
11 3id 12114 ppt
Strukturalizm i stylistyka (część II)

więcej podobnych podstron