„Relacyjne Bazy Danych (Oracle) ”

28
Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego „Relacyjne Bazy Danych (Oracle)Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. growany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolno Prezentacja dystrybuowana jest bezpłatnie Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83 www.kapitalludzki.p.lodz.pl 1

description

„Relacyjne Bazy Danych (Oracle) ” Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. - PowerPoint PPT Presentation

Transcript of „Relacyjne Bazy Danych (Oracle) ”

Page 1: „Relacyjne Bazy Danych (Oracle) ”

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

„Relacyjne Bazy Danych (Oracle)”

Prezentacja jest współfinansowana przez Unię Europejską w ramach

Europejskiego Funduszu Społecznego w projekcie pt.

„Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych ” Prezentacja dystrybuowana jest bezpłatnie

Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83www.kapitalludzki.p.lodz.pl

1

Page 2: „Relacyjne Bazy Danych (Oracle) ”

Podział języka SQL

DDL (Data Definition Language) – polecenia CREATE, DROP, TRUNCATE, ALTER

DML (Data Manipulation Language) – polecenia INSERT, UPDATE

DCL (Data Control Language) – polecenia GRANT i REVOKE

Zapytania (Query)

Page 3: „Relacyjne Bazy Danych (Oracle) ”

Polecenie INSERT

Wykorzystując polecenie INSERT można dodać nowe wiersze do tabeli

INSERT INTO tabela VALUES (val1,val2,...)

Lista wartości musi być podana w takiej samej kolejności jak kolumny tabeli, ciągi znaków oraz daty muszą być ujęte w pojedyncze cudzysłowy

Page 4: „Relacyjne Bazy Danych (Oracle) ”

Polecenie INSERT

Polecenie INSERT można wykorzystać do wstawienia wartości części kolumn

INSERT INTO tabela (col1,col2) VALUES (v1,v2)

Nieuzupełnione kolumny będą wypełnione wartościami domyślnymi

Należy wpisać wartości do kolumn typu NOT NULL nie posiadających wartości domyślnej

Page 5: „Relacyjne Bazy Danych (Oracle) ”

Polecenie UPDATE

UPDATE – uaktualnianie istniejących wierszy nowymi danymi

UPDATE tabela SET kol1=val1,kol2=val2 WHERE warunek

Page 6: „Relacyjne Bazy Danych (Oracle) ”

Tabele

Utworzenie tabelihttp://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7002.htm

Page 7: „Relacyjne Bazy Danych (Oracle) ”

Tabele

Tabelę można utworzyć na podstawie wyniku zapytania na innych tabelach

CREATE TABLE pracownicy_bez_pensji AS SELECT id,imie,nazwisko FROM pracownicy;

CREATE TABLE imiona AS SELECT id,UPPER(imie) FROM pracownicy;

Page 8: „Relacyjne Bazy Danych (Oracle) ”

Tabela z kluczem głównym

Page 9: „Relacyjne Bazy Danych (Oracle) ”

Tabela z kompozytowym kluczem

Przykład: Kluczem w tabeli jest zestawienie trzech kolumn

Page 10: „Relacyjne Bazy Danych (Oracle) ”

Dodawanie klucza

Dodawanie klucza do istniejącej tabeli

ALTER TABLE tabela

ADD CONSTRAINT nazwa_klucza PRIMARY KEY (col1, col2, col3, ...);

Usuwanie klucza

ALTER TABLE tabela

drop CONSTRAINT nazwa_klucza

Page 11: „Relacyjne Bazy Danych (Oracle) ”

Dodawanie klucza obcego

Dodawanie klucza obcego do istniejącej tabeli

ALTER TABLE tabela

ADD CONSTRAINT nazwa_klucza

FOREIGN KEY (col1,col2,col3,...)

REFERENCES tabela2 (col1, col2, col3,...);

Page 12: „Relacyjne Bazy Danych (Oracle) ”

Usuwanie tabeli

DROP TABLE pracownicy

Usunięcie tabeli może się nie udać – mogą istnieć inne tabele z danymi, które wskazują na obecną tabelę relacją klucza obcego

Page 13: „Relacyjne Bazy Danych (Oracle) ”

Indeksy

Indeks – struktura w bazie danych pozwalająca na szybsze odnalezienie wierszy posiadających określone w zapytaniu wartości kolumn

Jeżeli dana kolumna nie posiada indeksu, aby sprawdzić czy dany wiersz spełnia określone kryteria, należy odczytać wartość kolumny z dysku/bufora i porównać ją z wartością szukaną

Operacja taka nosi nazwę pełnego skanowania tabeli (Full Table Scan)

Page 14: „Relacyjne Bazy Danych (Oracle) ”

Indeksy

Kluczowym pojęciem w przypadku stosowania indeksów jest tzw: liczność zbioru (ang: Cardinality)

Liczność określa ilość unikatowych wartości w danej kolumnie w odniesieniu do wartości kolumny we wszystkich wierszach tabeli

Np: dla 1000000 wierszy100 unikatowych wartości – mniejsza liczność

300000 unikatowych wartości – większa liczność

Page 15: „Relacyjne Bazy Danych (Oracle) ”

Index B-Tree

Indeks podobny do postaci drzewa binarnego (jednak „B” w nazwie nie oznacza „Binary”)

Pozwala na szybkie wyszukiwanie znanej wartości lub jej części

Pozwala na automatyczne sortowanie wyników

Page 16: „Relacyjne Bazy Danych (Oracle) ”

Index B-Tree

Indeks można utworzyć na kilku kolumnach, każda kolumna może mieć inny kierunek sortowania

CREATE INDEX imie_pensja_idx ON osoby (imie ASC, pensja DESC);

Utworzenie indeksu na kilku kolumnach wykorzystywanych w klauzuli WHERE pozwala zmniejszyć liczbę operacji I/O przy wyszukiwaniu

Page 17: „Relacyjne Bazy Danych (Oracle) ”

Index typu B-Tree

Indeks tego typu warto zastosować dla kolumn, które posiadają często powtarzające się wartości

Dla kolumn, które są unikatowe zastosowanie indeksu typu B-Tree może nawet spowolnić wykonanie zapytania – konieczność przetworzenia drzewa o dużej głębokości

W większości baz danych indeksowanie kolumn sekwencyjnych (np: id) prowadzi do złego zbalansowania indeksu – Implementacja Oracle nie posiada tej wady (większość indeksów osiąga maksymalnie głębokość 3, w bardzo rzadkich przypadkach 4, teoretycznie głębokość może być jednak większa)

Page 18: „Relacyjne Bazy Danych (Oracle) ”

Indeks typu B-Tree

Przebudowanie indeksu

ALTER INDEX imie_pensja_idx REBUILD

Kiedy warto przebudować indeks?

Po dużych operacjach typu INSERT (np: po wykonaniu operacji typu ETL)

Jeżeli w tabeli została usunięta duża liczba wierszyOracle nie udostępnia wolnego miejsca powstałego po usunięciu wiersza, jedyny przypadek to taki, gdy wstawiana wartość jest identyczna z poprzednio usuniętą

W przypadku usunięcia dużej ilości wpisów z jednego liścia drzewa, istnieje mała szansa na ponowne wykorzystanie powstałego pustego miejsca

Page 19: „Relacyjne Bazy Danych (Oracle) ”

Index typu Bitmap

Indeks ma formę dwuwymiarowej tablicy

Kolumnami tablicy są unikatowe wartości indeksowanej kolumny

Wierszami są wszystkie wiersze z danej tabeli (ROWID)

Indeks przetrzymywany jest w postaci skompresowanej, zostaje rozpakowany do pamięci operacyjnej przy pierwszym użyciu – ogranicza to liczbę operacji I/O przy odczytaniu indeksu

Page 20: „Relacyjne Bazy Danych (Oracle) ”

Bitmap index

Ze względu na swoją strukturę indeksy bitmapowe powinny być wykorzystywane w przypadkach, gdy dana kolumna nie posiada dużo unikatowych wartości

Rozmiar indeksu powiększa się z każdym nowym unikatowym wpisem

Page 21: „Relacyjne Bazy Danych (Oracle) ”

Bitmap index

Przykład: Firma produkująca samochody, tabela z 10 milionami wierszy

Kolumny: rok produkcji, kolor, model posiadają często powtarzające się wartości (przy 10mln wierszy)

SELECT * FROM cars WHERE prod_year=1998 AND car_color='Yellow' AND car_model='Ford Mustang'

Page 22: „Relacyjne Bazy Danych (Oracle) ”

Bitmap Index

Kiedy warto stosować indeks typu Bitmap?

Kolumna posiada niewiele wartości unikatowych w porównaniu do całkowitej liczby wierszy

W zapytaniach wykorzystywane są wartości dokładne (operator „=”)

W zapytaniach występuje kilka warunków wykorzystujących operator „=” połączonych operatorami OR lub AND

Page 23: „Relacyjne Bazy Danych (Oracle) ”

Bitmap Index

Kiedy NIE wypada stosować indeksu typu Bitmap

W kolumnie występuje dużo unikatowych wartości – rozmiar indeksu będzie zbyt duży, konieczność czytania wielu bloków z dysku, oraz wykonywania operacji typu AND lub OR na dużej ilości danych

W warunkach wykorzystywane są inne operatory niż „=” np: „>” lub „<”, w takich przypadkach indeks typu Bitmap nie zostanie wykorzystany

Tabela nie jest często modyfikowana (niewielka ilość DML, lub czas wykonania operacji DML nie jest kwestią kluczową)

Page 24: „Relacyjne Bazy Danych (Oracle) ”

Indeks Bitmap Join

Podobny do indeksu typu Bitmap, wykorzystywany do łączenia tabel

Dla każdej wartości danej kolumny w indeksie przechowywane są wartości ROWID dla drugiej tabeli wykorzystywanej przy klauzuli JOIN spełniające dany warunek

Indeks tego typu działa tylko w przypadkach kiedy warunek połączenia tabel korzysta z dokładnego porównania (operator „=”)

Page 25: „Relacyjne Bazy Danych (Oracle) ”

Indeksy funkcyjne

Indeks utworzony na wyniku funkcji wykonanej na danej kolumnie

CREATE INDEX prac_nazwisko_idx on pracownicy (UPPER(nazwisko))

SELECT * FROM pracownicy WHERE UPPER(nazwisko) = 'KOWALSKI';

Page 26: „Relacyjne Bazy Danych (Oracle) ”

Tabele typu IOT

W przypadku gdy wszystkie kolumny w danej tabeli posiadają indeks, lub część kolumn posiada indeksy, a średnia długość wiersza jest względnie mała można pominąć przechowywanie tabeli w oddzielnym miejscu na dysku

IOT (Index Organized Table) – tabela przechowuje dane wierszy razem z danymi indeksu

Brak konieczności wykonywania oddzielnego odczytu w celu pobrania wartości z danego wiersza

Tabele IOT muszą posiadać klucz główny

Page 27: „Relacyjne Bazy Danych (Oracle) ”

Tabele typu IOT

Page 28: „Relacyjne Bazy Danych (Oracle) ”

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

„Relacyjne Bazy Danych (Oracle)”

Prezentacja jest współfinansowana przez Unię Europejską w ramach

Europejskiego Funduszu Społecznego w projekcie pt.

„Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych ” Prezentacja dystrybuowana jest bezpłatnie

Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83www.kapitalludzki.p.lodz.pl

28