Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań1 Systemy zarządzania bazami danych 5. Przetwarzanie zapytań.

Slides:



Advertisements
Podobne prezentacje
Połączenia oporników a. Połączenie szeregowe: R1 R2 Rn i U1 U2 Un U.
Advertisements

Strojenie SQL w bazie Oracle
Indeksy w bazie danych Oracle
Bazy danych 4. Algebra relacji P. F. Góra
Teoria układów logicznych
Optymalizacja zapytań
Modelowanie logiczne (dla relacyjnych SZBD)
Podział i zastosowanie
Rafał Hryniów Tomasz Pieciukiewicz
Architektura systemów komputerowych
S – student, P – przedmiot, W – wykładowca
6. Układy kształtujące funkcje odcinkami prostoliniowymi
Relacyjny model danych
Bazy danych i inżynieria oprogramowania
Bazy danych II Instrukcja SELECT Piotr Górczyński 25/08/2001.
Relacyjny model danych
„Program grający w szachy”
Materiały pochodzą z Platformy Edukacyjnej Portalu
Generyczne Repozytorium Dokumentów w XML
ZŁOŻONOŚĆ OBLICZENIOWA
Oryginał: Hector Garcia-Molina6. Optymalizacja zapytań1 Systemy zarządzania bazami danych 6. Optymalizacja zapytań
Systemy zarządzania bazami danych 14. Strojenie schematu.
Systemy zarządzania bazami danych 9. Transakcje. Oryginał: Hector Garcia-Molina9. Transakcje2 Współbieżność, wielodostęp T 1 T 2 …T n BD (więzy integralności)
Język SQL – zapytania zagnieżdżone (podzapytania)
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 2: Język bazy danych - SQL Proste zapytania.
(c) 1999, Instytut Informatyki Politechniki Poznańskiej Rozdział 3: Język bazy danych - SQL Funkcje grupowe.
Teoretyczne Podstawy Informatyki - Rok I - kierunek IS w IFAiIS UJ – 2006/ /11/06Prof. dr hab. Elżbieta Richter-Wąs Wykład 8b Algebra relacyjna Teoretyczne.
Relacyjny Model Danych
SQL-owskie szlaki górskie
Wykład 6 Standardowy błąd średniej a odchylenie standardowe z próby
BD-LAB6 Wojciech Pieprzyca
Wykład 4 Wojciech Pieprzyca
Klasyfikacja Obcinanie drzewa Naiwny klasyfikator Bayes’a kNN
Projektowanie fizycznej bazy danych
WYKONYWANIE ZAPYTAŃ Przygotował Lech Banachowski na podstawie: 1.Raghu Ramakrishnan, Johannes Gehrke, Database Management Systems, McGrawHill, 2000 (książka.
Bazy danych Algebra relacji.
Język SQL – ciąg dalszy DML (Data Manipulation Language)
Bazy Danych Wykład 1 S. Kozielski.
Relacyjny model danych
Język SQL (Structured Query Language) DDL (Data Definition Language)
Teoria relacyjnych baz danych
dr inż. Piotr Muryjas Wyższa Szkoła Przedsiębiorczości i Administracji
Bazy Danych II prowadzący: mgr inż. Leszek Siwik
OPERACJA DZIELENIA W SQL
Zależności funkcyjne.
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
SQL – zapytania posumowanie
Zbiór do posortowania mieści się w pamięci
Arkusze kalkulacyjne, część 3
Elementy Rachunku Prawdopodobieństwa i Statystyki
Andrzej Macioł Bazy danych – model relacyjny – cz. 1 Andrzej Macioł
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
Model relacyjny.
Autor: Joanna Barańska Promotor: dr inż. Paweł Figat Konsultant:
PL/SQL – dalsza wędrówka
Łódź 2008 Banki danych WYKŁAD 2 dr Łukasz Murowaniecki T-109.
Temat 1: Strukturalny język zapytań SQL
1 SBD, L.Banachowski Podstawy SQL - języka relacyjnych i obiektowo-relacyjnych baz danych (SQL2, SQL'1999, Oracle) Powtórzenie wyk ł adu 3.
Metody matematyczne w inżynierii chemicznej Wykład 3. Całkowanie numeryczne.
567.Jakie prądy płyną przez poszczególne opory na schemacie poniżej, jeśli R 1 =3 , R 2 =7 , R 3 =20 , U=20V, a galwanometr wskazuje i G =0? B R1R1.
Zagadnienia AI wykład 2.
Zagadnienia AI wykład 5.
Relacja (ang.relation) Po podzieleniu danych na tabele i zdefiniowaniu pól kluczy podstawowych trzeba wprowadzić do systemu bazy danych informacje na temat.
Optymalna konfiguracja Microsoft SQL Server 2014
Bazy Danych Wprowadzenie
Optymalizacja zapytań w SQL Server
Pojęcia podstawowe Algebra Boole’a … Tadeusz Łuba ZCB 1.
Indeksy.
Nieprawidłowo zaprojektowana tabela
Zapis prezentacji:

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań1 Systemy zarządzania bazami danych 5. Przetwarzanie zapytań

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań2 Przetwarzanie zapytań Zapytanie  Plan wykonania Plan wykonania  Wynik Przykład: Select B,D From R,S Where R.A = “c”  S.E = 2  R.C=S.C

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań3 RABC S CDE a11010x2 b12020y2 c21030z2 d23540x1 e34550y3 WynikB D 2 x

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań4 Jaki plan wykonania tego zapytania? - Oblicz produkt kartezjański - Wybierz pasujące krotki - Wykonaj rzutowanie Plan naiwny

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań5 RXSR.AR.BR.CS.CS.DS.E a x 2 a y 2. C x 2. Bingo! Mamy jednego...

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań6 Algebra relacji = logiczny plan wykonania Plan naiwny  B,D  R.A =“c”  S.E=2  R.C=S.C  X RS Lub:  B,D [  R.A=“c”  S.E=2  R.C = S.C (RXS)]

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań7 Plan sprytniejszy  B,D  R.A = “c”  S.E = 2 R S Złączenie naturalne

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań8 R S A B C  ( R )  ( S ) C D E a 1 10 A B C C D E 10 x 2 b 1 20c x 2 20 y 2 c y 2 30 z 2 d z 2 40 x 1 e y 3

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań9 Plan z użyciem indeksów Wykorzystaj indeksy na R.A i S.C (1) Użyj indeksu na R.A żeby wybrać te krotki R, dla których R.A = “c” (2) Dla każdej znalezionej wartości R.C użyj indeksu na S.C by znaleźć pasujące krotki (3) Odrzuć te krotki S, w których S.E  2 (4) Sklej pasujące krotki z R i S (5) Zrzutuj pasujące pary na atrybuty BD i wypisz je jako wynik

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań10 R S A B C C D E a x 2 b y 2 c z 2 d x 1 e y 3 AC I1I1 I2I2 =“c” czy =2? wynik: następna krotka:

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań11 Analiza składniowa Transformacja Zastosuj reguły Oszacuj wielkość wyniku Wygeneruj plany fizyczne Oszacuj koszty Wybierz najtańszy Wykonaj {P 1,P 2,…..} {(P 1,C 1 ),(P 2,C 2 )...} PiPi wynik zapytanie SQL drzewo składni logiczny plan zapytania poprawiony l.p.z. l.p.z. + szacunki statystyki Schemat optymalizatora

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań12 Przykładowe zapytanie SQL SELECT title FROM StarsIn WHERE starName IN ( SELECT name FROM MovieStar WHERE birthdate LIKE ‘%1960’ ); (Znajdź filmy, w których grały gwiazdy urodzone w 1960)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań13 Drzewo składni SELECT FROM WHERE IN title StarsIn ( ) starName SELECT FROM WHERE LIKE name MovieStar birthDate ‘%1960’

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań14 Otrzymane wyrażenie „algebry relacji”  title  StarsIn IN  name  birthdate LIKE ‘%1960’ starName MovieStar

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań15 Wstępny logiczny plan zapytania  title  starName=name StarsIn  name  birthdate LIKE ‘%1960’ MovieStar 

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań16 Poprawiony logiczny plan zapytania  title starName=name StarsIn  name  birthdate LIKE ‘%1960’ MovieStar Pytanie: Przesunąć rzutowanie do StarsIn?

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań17 Szacowanie wielkości wyniku Dobrze znać wielkość StarsIn MovieStar 

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań18 Pierwszy plan fizyczny Parametry: kolejność złączania, ilość RAM, wynikowe atrybuty... Hash join Full scan Index unique scan Parametry: warunek selekcji,... StarsInMovieStar

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań19 Szacowanie kosztów L.P.Z P 1 P 2 … P n C 1 C 2 … C n Wybierz najniższy!

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań20 Optymalizacje w algebrze relacji Reguły transformacji zachowujące semantykę Które transformacje są dobre? –Zachowują semantykę –Dają szansę na poprawę efektywności –Nie obniżą efektywności

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań21 Złączenie naturalne Przemienność R S= S R Łączność (R S) T = R (S T) Podobne właściwości dla –Iloczynu kartezjańskiego –Sumy mnogościowej –Przecięcia

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań22 Właściwości Przenoszą nazwy atrybutów do wyniku, więc ich porządek nie ma znaczenia Można je zapisywać także jako drzewa T R R SS T

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań23 R x S = S x R (R x S) x T = R x (S x T) R U S = S U R R U (S U T) = (R U S) U T Łączność i przemienność R S=SR (R S) T= R (S T)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań24 Selekcja  p1  p2 (R) =  p1vp2 (R) =  p1 [  p2 (R)] [  p1 (R)] U [  p2 (R)]

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań25 Zbiory a wielozbiory R = {a,a,b,b,b,c} S = {b,b,c,c,d} R U S = ? Opcja 1 SUM R U S = {a,a,b,b,b,b,b,c,c,c,d} Opcja 2 MAX R U S = {a,a,b,b,b,c,c,d}

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań26 Opcja 2 (MAX) powoduje prawdziwość:  p1vp2 (R) =  p1 (R) U MAX  p2 (R) Przykład: R={a,a,b,b,b,c} p1 spełnione przez a,b; p2 przez b,c  p1vp2 (R) = {a,a,b,b,b,c}  p1 (R) = {a,a,b,b,b}  p2 (R) = {b,b,b,c}  p1 (R) U  p2 (R) = {a,a,b,b,b,c}

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań27 SUM też ma sens (może nawet większy?) Senators (……)Rep (……) Ile jest parlamentarzystów z Kalifornii? T1 =  yr,state Senators; T2 =  yr,state Reps T1 Yr State T2 Yr State 97 CA 99 CA 99 CA 99 CA 98 AZ 98 CA Jak sumować?

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań28 Trzeba podjąć decyzję -> Używamy opcji SUM do sumowania wielozbiorów -> Niektórych reguł nie da się zastosować dla wielozbiorów (np. dla selekcji alternatywą)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań29 Rzutowanie Niech: X = zbiór atrybutów Y = zbiór atrybutów XY = X U Y  xy (R) =  x [  y (R)]

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań30 p = warunek tylko na atrybutach R q = warunek tylko na atrybutach S m = warunek na atrybutach R i S łącznie  p (R ⋈ S) =[  p (R)] ⋈ S  q (R ⋈ S) = R ⋈ [  q (S)] Reguły dla  i ⋈

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań31  p  q (R ⋈ S) =[  p (R)] ⋈  q (S)]  p  q  m (R ⋈ S) =  m ([  p (R)] ⋈ [  q (S)])  pvq (R ⋈ S) = [  p (R) ⋈ S] U [R ⋈  q (S)] Reguły dla  i ⋈

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań32 Reguły dla  i  x = podzbiór atrybutów R z = atrybuty w warunku P (też fragment R)  x [  p ( R ) ] =  {  p [  x ( R ) ] } x x  xz

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań33 x = podzbiór atrybutów R y = podzbiór atrybutów S z = przecięcie zbiorów atrybutów R i S  xy (R ⋈ S) =  xy { [  xz ( R ) ] ⋈ [  yz ( S ) ] } Reguły dla  i  ⋈

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań34  xy {  p (R ⋈ S) } =  xy {  p [  xz’ (R) ⋈  yz’ (S)] } z’ = z U { atrybuty użyte w p }

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań35 Iloczyn kartezjański, selekcja i rzut Analogicznie, bo to szczególny przypadek złączenia naturalnego, np.  p (R  S) =[  p (R)]  S  q (R  S) = R  [  q (S)]

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań36  p (R  S) =  p (R)   p (S)  p (R  S) =  p (R)  S =  p (R)   p (S) Reguły dla , , 

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań37  p1  p2 (R)   p1 [  p2 (R)]  p (R ⋈ S)  [  p (R)] ⋈ S R ⋈ S  S ⋈ R  x [  p (R)]   x {  p [  xz (R)] } Które transformacje są do dobre?

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań38 Na zdrowy rozum: rób rzuty wcześnie R(A,B,C,D,E) x={E} P: (A=3)  (B=“cat”)  E {  p (R)} czy  E {  p {  ABE (R)} }

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań39 A co jeśli mamy indeks(y) na A i B? B = “cat” A=3 Przetnij zbiory wskaźników żeby dostać zbiór pasujących krotek

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań40 Podsumowanie transformacji Mało transformacji zawsze dobrych Zwykle dobre: wczesna selekcja Inne możliwości –Eliminacja wspólnych podwyrażeń –Eliminacja duplikatów lub... –... Eliminacja eliminacji duplikatów

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań41 Szacowanie kosztu planu wykonania (1) Szacowanie rozmiaru wyniku (2) Szacowanie liczby operacji wejścia-wyjścia

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań42 Szacowanie wielkości wyniku Statystyki dla relacji R –T(R) : liczba krotek R –S(R) : liczba bajtów w każdej krotce R –B(R): liczba bloków zajmowanych przez R –V(R, A) :liczba różnych wartości atrybutu A

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań43 Przykład RA: 20-bajtowy napis B: 4-bajtowy integer C: 8-bajtowa data D: 5-bajtowy napis ABCD cat110a cat120b dog130a dog140c bat150d T(R) = 5 S(R) = 37 V(R,A) = 3V(R,C) = 5 V(R,B) = 1V(R,D) = 4

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań44 Szacunki rozmiaru dla W = R1  R2 T(W) = S(W) = T(R1)  T(R2) S(R1) + S(R2)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań45 S(W) = S(R) T(W) = ? Szacunki rozmiaru dla W =  A=a  (R)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań46 Przykład RV(R,A)=3 V(R,B)=1 V(R,C)=5 V(R,D)=4 W =  z=val (R) T(W) = ABCD cat110a cat120b dog130a dog140c bat150d T(R) V(R,Z)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań47 Założenie 1: równomierny rozkład W =  Z=val  (R) Rozkład wartości atrybutu selekcjonującego Z jest równomierny wśród V(R,Z) przyjmowanych wartości

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań48 Założenie 2: równomiernie w dziedzinie W =  Z=val  (R) Rozkład wartości atrybutu selekcjonującego Z jest równomierny wśród DOM(R,Z) wartości z dziedziny atrybutu Z

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań49 Przykład R Wg założenia 2: V(R,A)=3 DOM(R,A)=10 V(R,B)=1 DOM(R,B)=10 V(R,C)=5 DOM(R,C)=10 V(R,D)=4 DOM(R,D)=10 ABCD cat110a cat120b dog130a dog140c bat150d W =  z=val (R) T(W) = T(R) DOM(R,Z)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań50 C=val  T(W) = (1/10)1 + (1/10) = (5/10) = 0.5 B=val  T(W)= (1/10) = 0.5 A=val  T(W)= (1/10)2 + (1/10)2 + (1/10)1 = 0.5

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań51 Selektywność selekcji ;) SC(R,A) = średnia liczba rekordów spełniających warunek równościowy na R.A T(R) V(R,A) SC(R,A) = T(R) DOM(R,A)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań52 A co z W =  z  val (R) ? T(W) = ? Rozwiązanie 1: T(W) = T(R)/2 Rozwiązanie 2: T(W) = T(R)/3

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań53 Rozwiązanie 3: Oszacuj wartości w zakresie Przykład R Z Min=1 V(R,Z)=10 W=  z  15 (R) Max=20 f = = 6 (ułamek zakresu) T(W) = f  T(R)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań54 Szacowanie zakresu f  V(R,Z) = liczba różnych wartości T(W) = = f  T(R) Bardziej dokładnie histogramy wartości –Problemy z ponownym użyciem planu [f  V(Z,R)]  T(R) V(Z,R)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań55 Szacunki rozmiaru dla W = R1 ⋈ R2 x = atrybuty R1 y = atrybuty R2 Przypadek 1: X  Y =  –Tak samo jak R1  R2

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań56 Przypadek 2: W = R1 ⋈ R2 gdy X  Y={A} R1 A B C R2 A D Założenie (zależność inkluzyjna): V(R1,A)  V(R2,A)  Każda wartość R1.A jest także w R2.A V(R2,A)  V(R1,A)  Każda wartość R2.A jest także w R1.A

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań57 R1 A B C R2 A D Szacunek T(W) gdy V(R1,A)  V(R2,A) Weź 1 krotkę Dopasuj 1 krotka pasuje do T(R2) krotek V(R2,A) więc T(W) = T(R2)  T(R1) V(R2, A)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań58 Wielkość złączenia V(R1,A)  V(R2,A) T(W) = T(R2) T(R1) V(R2,A) V(R2,A)  V(R1,A) T(W) = T(R2) T(R1) V(R1,A) T(W) = T(R2) T(R1) max{ V(R1,A), V(R2,A) }

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań59 Przy rownomierności w dziedzinie R1 ABC R2 A D Ta krotka pasuje do T(R2)/DOM(R2,A) krotek, więc T(W) = T(R2) T(R1) = T(R2) T(R1) DOM(R2, A) DOM(R1, A) Zakładamy że takie same

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań60 Wielkość krotki wyniku (zawsze) S(W) = S(R1) + S(R2) - S(A) rozmiar atrybutu A

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań61 Pośrednie szacunki T,S,V też potrzebne Np. W = [  A=a (R1) ] ⋈ R2 Relacja U T(U) = T(R1)/V(R1,A) S(U) = S(R1) Potrzebne też V (U, *) !!

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań62 Przykład R1V(R1,A)=3 V(R1,B)=1 V(R1,C)=5 V(R1,D)=3 U =  A=a (R1) ABCD cat110 cat120 dog13010 dog14030 bat15010 V(U,A) =1 V(U,B) =1 V(U,C) = T(R1) V(R1,A) V(U,D)... gdzieś w srodku

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań63 Przybliżenia dla U =  A=a (R) Atrybut selekcji V(U,A) = 1 Klucz V(U,K) = T(U) Inne: ? V(U,B)= V(R,B)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań64 Dla złączeń U = R1(A,B) ⋈ R2(A,C) Zachowywanie zbiorów wartości: V(U,A) = min { V(R1, A), V(R2, A) } V(U,B) = V(R1, B) V(U,C) = V(R2, C)

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań65 Z = R1(A,B) ⋈ R2(B,C) ⋈ R3(C,D) Przykładowe statystyki R1:T(R1) = 1000 V(R1,A)=50 V(R1,B)=100 R2:T(R2) = 2000 V(R2,B)=200 V(R2,C)=300 R3:T(R3) = 3000 V(R3,C)=90 V(R3,D)=500

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań66 T(U) = 1000  2000 V(U,A) = V(U,B) = 100 V(U,C) = 300 Częściowy wynik U = R ⋈ S

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań67 Z = U ⋈ R3 T(Z) = 1000  2000  3000 V(Z,A) =  300 V(Z,B) = 100 V(Z,C) = 90 V(Z,D) = 500 ☺ Na szczęście wynik też nie zależy od kolejności złączeń

Oryginał: Hector Garcia-Molina5. Przetwarzanie zapytań68 Podsumowanie szacowania Szacowanie wielkości wyniku jest sztuką (trochę tajemną) Nie zapomnieć o: –okresowej aktualizacji statystyk (koszty?)