JOIN-Strategien eines Optimizers (1) Die drei unten aufgeführten Join-Strategien *) sollen exemplarisch anhand der folgenden SQL-Abfrage erklärt werden: select * from B, C where c.x=b.w and c.z=17; Verschachtelter Loop-Join (Nested Loop) erste Tabelle Tabelle C z x 17 cc 17 aa 18 ee 17 ff zweite Tabelle Tabelle B w y aa 2 cc 3 ff 1 resultierendes Tupel z x w y 17 cc cc 3 17 aa aa 2 17 ff ff 1 *) vergleiche hierzu auch Praktikum 2, Teil II Schestag Datenbanken (Cnam) Kapitel 5-77
JOIN-Strategien eines Optimizers (2) Sort/Merge-Join Sort+Filter Tabelle C z x 17 aa 17 cc 17 ff sortierte Tabelle B w y aa 2 cc 3 ff 1 Tupel aus C und B z x w y 17 aa aa 2 17 cc cc 3 17 ff ff 1 Schestag Datenbanken (Cnam) Kapitel 5-78
JOIN-Strategien eines Optimizers (3) Hash-Join 1. 1. Tabelle Tabelle 2 wird wird gelesen gelesen und und in in einer einer Hash-Tabellle abgelegt. Hash-Tabel- abgelegt. Tabelle 2 Zeilen- Header Zeilen Tabelle 1 Was nicht in den Speicher passt, wird auf Platte ausgelagert. Plattenbereich 2. 2. Werte Werte von von Tabelle Tabelle 1 werden werden in in der der Hash-Tabelle Hash-Tabellegesucht. Schestag Datenbanken (Cnam) Kapitel 5-79
Optimizer-Strategien und Explain select * from a, b where a.pka=b.pka; Welches ist der günstigste Ausführungsplan? pka c1 c2 pkb pka c3 --------------------- 1 A x 5 1 z 2 B w 8 2 t 3 M s 7 3 z a pka c1 c2 a.pka=b.pka b pkb pka c3 Welche Freiheitsgrade hat der Optimizer bei der Festlegung des Ausführungsplans? Schestag Datenbanken (Cnam) Kapitel 5-80
Optimizer-Strategien und Explain Die Strategie des Optimizers wird beeinflusst durch geschätzte Kosten, geschätzte Anzahl der Ausgabezeilen, Notwendigkeit für temporäre Dateien, Verwendung von Indexen, Verwendung von Hash-Joins, Möglichkeit des parallelen Scans auf fragmentierten Tabellen, erforderliche Zugriffe auf remote-datenquellen, etc. Der Optimizer eines DBMS wählt aus verschiedenen möglichen Ausführungsplänen zur Bearbeitung einer SQL-Anfrage den kostengünstigsten *) Ausführungsplan aus. *) Eine Vertiefung dieser Thematik ist u.a. Inhalt der Vorlesung Konzeption und Administration von Datenbanken (NFE113) aus dem Vorbereitungszyklus. Schestag Datenbanken (Cnam) Kapitel 5-81
Optimizer-Strategien und Explain Um das Verhalten des Optimizers zu beobachten, kann der vom Optimizer ausgewählte Ausführungsplan pro SQL-Anfrage angezeigt und so das Performanceverhalten analysiert werden. Hierfür stellen DBMS die Möglichkeit zur Verfügung, über eine EXPLAIN- Funktionalität den Ausführungsplan textuell oder grafisch als Operatorbaum anzeigen zu lassen, ohne dass die Anfrage tatsächlich ausgeführt wird. Die Strategie des Optimizers kann vom DBA durch die interne Datenorganisation und andere Parameter beeinflusst werden. Schestag Datenbanken (Cnam) Kapitel 5-82
Oracle-Explain Visualisierung im SQL-Developer Der SQL-Developer bietet auf den Worksheets zu einer Datenbankverbindung die Möglichkeit, den Ausführungsplan anzuzeigen: Explain Plan generates the execution plan for the statement (internally executing the EXPLAIN PLAN statement). To see the execution plan, click the Explain tab. Schestag Datenbanken (Cnam) Kapitel 5-83
Oracle-Explain Welche Strategien des Optimizers können Sie den Ausführungsplänen auf den folgenden Folien entnehmen? Ausführungsplan 1 Schestag Datenbanken (Cnam) Kapitel 5-84
Oracle-Explain Ausführungsplan 2 (ist diese Abfrage tatsächlich sinnvoll?) Schestag Datenbanken (Cnam) Kapitel 5-85
Oracle-Explain Ausführungsplan 3 Schestag Datenbanken (Cnam) Kapitel 5-86
SQL - Structured Query Language SQL Data Definition Language DDL Systemkatalog, Reverse-Engineering und Schichtenarchitektur SQL Data Manipulation Language DML Update-Operatoren: INSERT, UPDATE, DELETE Relationen-Algebra Retrieval-Operator: SELECT Verbundoperationen: JOIN Spalten- (bzw. Aggregat-) Funktionen Sichten: VIEW Rechtevergabe Schestag Datenbanken (Cnam) Kapitel 5-87
Die Spaltenfunktionen (1) SQL bietet die Möglichkeit, auf Spalten von (Ergebnis-)Tabellen oder Zeilengruppen solcher Tabellen spezielle Funktionen anzuwenden: COUNT(Spalte) Anzahl von Werten einer Spalte (Zeilenanzahl) SUM(Spalte) AVG(Spalte) MIN(Spalte) MAX(Spalte) Summe der Werte einer Spalte (nur für numerische Argumente) Durchschnitt der Werte einer Spalte (nur für numerische Argumente) kleinster Wert aller Werte einer Spalte größter Wert aller Werte einer Spalte Solche Funktionen nennt man Spalten- oder auch Aggregatfunktionen, da sie auf Spalten angewandt werden können bzw. aggregierte Informationen zu einem Spaltenwert berechnen können. Alle aufgeführten Spaltenfunktionen berücksichtigen keine NULL-Werte! Schestag Datenbanken (Cnam) Kapitel 5-88
Die Spaltenfunktionen (2) Die Spaltenfunktion COUNT( ) ist die einzige, die als Argument * zulässt, da sie die Anzahl der Zeilen ermittelt und dieser Wert nicht von einer bestimmten Spalte abhängig ist. Hat das Argument einen expliziten Spaltennamen, so werden die Einträge ungleich NULL in dieser Spalte gezählt. Sollen nur Zeilen unterschiedlichen Inhalts gezählt werden, so erreicht man dies durch Einfügen des Schlüsselwortes DISTINCT im Argument. Alle anderen Spaltenfunktionen müssen als Argument einen Spaltennamen der entsprechenden Tabelle erhalten. Spalten, die durch die Anwendung von Spaltenfunktionen neu entstehen, sollte man mit Hilfe der AS-Klausel einen sinnvollen Namen geben: SELECT COUNT(*) as Anzahl FROM flug; SELECT COUNT(DISTINCT z_ort) FROM flug; SELECT COUNT(*) as Anzahl FROM maschine WHERE sitze > 230; SELECT SUM(e_preis) as Summe FROM eteil; Schestag Datenbanken (Cnam) Kapitel 5-89
Die Spaltenfunktionen (3) Zur Erstellung von Listen / Reports ist es oft wünschenswert, Ergebnistabellen einer Select-Anfrage nach bestimmten Spaltenwerten zeilenweise zu gruppieren. Die GROUP BY- Klausel unterstützt die zeilenweise Gruppierung von Tabellen. Diese Klausel findet häufig Anwendung im Zusammenhang mit Spaltenfunktionen, da (aggregierte) Informationen über Gruppen von Zeilen und nicht über jede einzelne Ausprägung der Gruppe erwünscht sind. Beispiel 18 Man interessiert sich für das durchschnittliche Gehalt in jeder Berufsgruppe einer Organisation. Intern erfolgt zunächst immer ein SORT nach der Spalte, nach der gruppiert wird (im Beispiel ist dies die Spalte beruf). Es ist wichtig, sich dessen bewusst zu sein, da ein SORT immer mit erheblichen Aufwänden verbunden ist (Performance!). Schestag Datenbanken (Cnam) Kapitel 5-90
Die Spaltenfunktionen (4) Nun wird die angegebene Spaltenfunktion auf alle Zeilen angewandt, die bzgl. der Gruppierungsspalte den gleichen Wert haben, d.h. solange, bis in der entsprechenden Spalte ein so genannter Gruppenwechsel eintritt. SELECT beruf, AVG(gehalt)as average FROM angestellter GROUP BY beruf ORDER BY 2 DESC; Schestag Datenbanken (Cnam) Kapitel 5-91
Die Spaltenfunktionen (5) Weitere Besonderheiten bei Anwendung der GROUP BY-Klausel: Alle Column-Elemente nach SELECT müssen mit Spaltenfunktionen ermittelt werden, mit Ausnahme der GROUP BY-Spalte (die aus semantischen Gründen immer in der Ergebnistabelle enthalten sein sollte). Die GROUP BY-Klausel kann um eine HAVING-Klausel erweitert werden, die aus den ermittelten Gruppen bestimmte Gruppen herausfiltert: Mit HAVING können Gruppen ausgewählt werden. GROUP BY... HAVING steht immer ganz am Ende eines (Sub-) SELECTS (ggf. gefolgt von einer ORDER BY-Anweisung). Schestag Datenbanken (Cnam) Kapitel 5-92
Die Spaltenfunktionen (6) In einer SELECT-Anweisung können sowohl WHERE- als auch HAVING- Klauseln vorkommen: WHERE auf Zeilenebene entspricht HAVING auf Gruppenebene filtert VOR dem Gruppieren filtert NACH dem Gruppieren SELECT beruf, AVG(gehalt)as average FROM angestellter WHERE adr = "Kaiserslautern" GROUP BY beruf HAVING AVG(gehalt) > 5000.0; filtert alle Angestellten aus Kaiserslautern vor dem internen SORT und GROUP BY. filtert alle Berufsgruppen mit AVG(gehalt) > 5000 nach dem internen SORT und GROUP BY. SQL unterstützt nur einstufige Gruppenwechsel. Mehrstufige Gruppenwechsel werden ggf. von Reportgeneratoren unterstützt. Schestag Datenbanken (Cnam) Kapitel 5-93
SQL - Structured Query Language SQL Data Definition Language DDL Systemkatalog, Reverse-Engineering und Schichtenarchitektur SQL Data Manipulation Language DML Update-Operatoren: INSERT, UPDATE, DELETE Relationen-Algebra Retrieval-Operator: SELECT Verbundoperationen: JOIN Spalten- (bzw. Aggregat-) Funktionen Sichten: VIEW Rechtevergabe Schestag Datenbanken (Cnam) Kapitel 5-94
VIEW Sichten Eine VIEW ist eine virtuelle Tabelle, die sich bzgl. der DML-Operationen für die Benutzer wie eine normale Tabelle verhält. Eine VIEW ist aber kein eigenständiges Objekt, sondern wird immer dynamisch aus den Spalten anderer Tabellen oder Views abgeleitet. Eine VIEW ist ein dynamisches Fenster, das als Maske nur einen Ausschnitt der Datenbank zeigt. ETEIL (TABLE) E_NR HERST TYP E_BEZ E_PREIS E_MNG VBRUTTO (VIEW) NR BEZ BRUTTO * 1.19 VBR (VIEW) Bezeichnung Bruttopreis Schestag Datenbanken (Cnam) Kapitel 5-95
VIEW Sichten: Deklaration Die Deklaration einer VIEW erfolgt über eine SELECT-Anweisung. Eine VIEW besitzt für ihre Spalten auch Spaltennamen. Werden beim CREATE VIEW keine Spaltennamen angegeben, so werden die Namen der Spalten aus dem zugrunde liegenden SELECT-Teil verwendet. Spaltennamen müssen für alle Spalten angegeben werden, falls eine Funktion oder ein arithmetischer Ausdruck oder Konstanten verwendet werden. CREATE VIEW VBRUTTO (NR, BEZ, BRUTTO) AS SELECT E_NR, E_BEZ, E_PREIS * 1.19 FROM ETEIL; CREATE VIEW VBR (Bezeichnung, Bruttopreis) AS SELECT BEZ, BRUTTO FROM VBRUTTO; Schestag Datenbanken (Cnam) Kapitel 5-96
VIEW Sichten: DML-Operationen Der Datentyp der Spalten einer VIEW bestimmt sich aus dem Format der Spalten des SELECT-Teils. Der Anwender kann nicht erkennen, ob er DML-Operationen auf eine TABLE oder eine VIEW absetzt. Es entsteht kein Duplikat der Daten bei der Generierung einer VIEW (andernfalls spricht man von MATERIALIZED VIEW). Bei jeder Abfrage wird mit Hilfe der zugrunde liegenden SELECT-Anweisung die VIEW generiert (dies hat Einfluss auf die Performance!). Auf der Basis einer VIEW kann eine weitere VIEW definiert werden (vgl. Beispiel VBR oben). Ein INSERT über eine VIEW ist nicht möglich, wenn die verborgenen Spalten mit NOT NULL definiert sind, ein UPDATE nur dann, wenn die geänderten Werte eindeutig einer Basistabelle zugeordnet werden können ( Join-View!). Schestag Datenbanken (Cnam) Kapitel 5-97
VIEW Sichten: WITH CHECK OPTION VIEW mit CHECK OPTION Datensätze können über die VIEW nur manipuliert werden, wenn sie über die VIEW auch wieder sichtbar werden. Die Klausel WITH CHECK OPTION garantiert dabei, dass bei einem INSERT oder UPDATE auf die VIEW die entsprechende Bedingung geprüft wird. Beispiel CREATE VIEW personal (pers_nr, name, adresse, beruf) AS SELECT per_nr, name, adr, beruf FROM angestellter WHERE gehalt < 10000.0 WITH CHECK OPTION; Das Gehalt kann in diesem Beispiel nicht mit einer UPDATE-Anweisung auf einen Wert 10000.0 erhöht werden: Schestag Datenbanken (Cnam) Kapitel 5-98
VIEW Sichten: Vorteile Die Handhabung der Datenbank wird erleichtert. Es ist nicht nötig, eine SELECT-Anweisung immer wieder einzugeben. Für häufig benötigte, komplexe Abfragen wird eine VIEW definiert und getestet. Aus dieser VIEW können dann einzelne Datensätze selektiert werden. Der Endanwender benützt für komplexe Abfragen vordefinierte Views. Datenschutz Der Endanwender kann im Zusammenhang mit der Vergabe von speziellen Zugriffsrechten auf Views nur die Daten sehen, für die er berechtigt ist (z.b. alle Personalstammsätze mit Gehältern unter 10.000,-- EUR). Datenunabhängigkeit Sichten werden verwendet, um innerhalb eines DB-Systems einen hohen Grad an Datenunabhängigkeit zu erreichen. Der Benutzer muss nicht wissen, in welcher TABLE sich die benötigten Daten befinden. Er greift auf die Daten über eine VIEW zu. Bei einer Änderung der DB-Struktur muss eventuell die VIEW neu definiert werden, aber die Anwendungsprogramme müssen nicht geändert werden (Wartungsfreundlichkeit). Schestag Datenbanken (Cnam) Kapitel 5-99
SQL - Structured Query Language SQL Data Definition Language DDL Systemkatalog, Reverse-Engineering und Schichtenarchitektur SQL Data Manipulation Language DML Update-Operatoren: INSERT, UPDATE, DELETE Relationen-Algebra Retrieval-Operator: SELECT Verbundoperationen: JOIN Spalten- (bzw. Aggregat-) Funktionen Sichten: VIEW Rechtevergabe Schestag Datenbanken (Cnam) Kapitel 5-100
Rechtevergabe Die Vergabe von Zugriffsrechten: GRANT, REVOKE, ROLES In der Regel sollen nicht alle Informationen eines Datenbanksystems allen Benutzergruppen gleichermaßen zur Verfügung stehen. Mit Hilfe von SQL können unterschiedliche Zugriffsrechte auf die Objekte relationaler Datenbanken vergeben werden. Bei der Vergabe von Zugriffsrechten auf Datenbanken müssen grundsätzlich drei Aspekte berücksichtigt werden: WER wird autorisiert (Subjekt), für WELCHE OBJEKTE wird das Subjekt autorisiert, für WELCHE OPERATIONEN darf der Zugriff auf die Objekte erfolgen. Die Verwaltung der erteilten Zugriffsrechte erfolgt ausschließlich über das DBMS. Schestag Datenbanken (Cnam) Kapitel 5-101
Rechtevergabe GRANT (1) Syntax: GRANT <Recht,> ON <Objekt> TO <User,> [WITH GRANT OPTION]; Jeder Creator eines Datenbankobjektes erhält automatisch alle Rechte, die für dieses Objekt sinnvoll sind. Beispiel Der Creator einer Tabelle B erhält automatisch SELECT, INSERT, UPDATE, DELETE und REFERENCES Rechte auf B (s. nächste Folie). Außerdem hat der Creator das Recht, alle diese Rechte vollständig oder eingeschränkt an andere Benutzer(gruppen) weiter zu vergeben. Es ist wichtig, für jeden Benutzer zu speichern, zu welchem Zeitpunkt und von welchen Benutzern er Rechte erhalten hat (vgl. auch Folie 4-99). Schestag Datenbanken (Cnam) Kapitel 5-102
Rechtevergabe GRANT (2) < Recht, > In der Liste der Rechte kann das Schlüsselwort all (Langform all privileges) als Platzhalter für alle zu vergebenden Rechte stehen, oder es können die folgenden Schlüsselwörter verwendet werden: select (Leserecht), insert [(column,)], update [(column,)], Schreibrechte delete, usage (zur Recht-Vergabe im Zusammenhang mit Domains), references [(column,)] (zur Rechte-Vergabe im Zusammenhang mit der Referenzierung einer speziellen Tabelle im Rahmen eines Foreign Key-Constraints). Schestag Datenbanken (Cnam) Kapitel 5-103
Rechtevergabe GRANT (3) < Objekt > Ein Zugriffsobjekt ist in der Regel eine TABLE, aber auch eine VIEW, oder ein DOMAIN. Ist das Objekt eine TABLE oder eine VIEW so reicht es, den Namen des Objektes zu nennen; die Angabe des Schlüsselwortes TABLE bzw. VIEW ist optional. Ist das Objekt ein Domain, so lautet die Syntax.... ON DOMAIN <domain-name> Schestag Datenbanken (Cnam) Kapitel 5-104
Rechtevergabe GRANT (4) < User, > Diese Liste besteht in der Regel aus einem oder mehreren Benutzerkennungen, oder aus dem Schlüsselwort PUBLIC, mit dem alle Benutzerkennungen für das System zu jedem Zeitpunkt gemeint sind. WITH GRANT OPTION Mit dieser Option wird das Recht auf die Erteilung von Rechten bzgl. der Rechteliste und des Objektes der GRANT- Anweisung vergeben. Beispiel create view MeinAuftrag as select * from Auftrag where Kunde = user with check option; grant select, insert on MeinAuftrag to public; Welche Wirkung hat die Definition der VIEW MeinAuftrag und die darauf basierende Rechtevergabe? Jeder darf SEINE Aufträge einfügen und anschauen, aber nicht ändern, löschen, ebenso nicht die Aufträge anderer User selektieren und manipulieren! Schestag Datenbanken (Cnam) Kapitel 5-105
Rechtevergabe REVOKE (1) Alle mit einer GRANT-Anweisung vergebenen Rechte können mit einer REVOKE-Anweisung wieder zurück genommen werden: Syntax: REVOKE [GRANT OPTION FOR] <Recht,> ON <Objekt> FROM <User,> {RESTRICT CASCADE}; Die RESTRICT- bzw. CASCADE-Klausel regelt innerhalb der REVOKE- Anweisung den Umgang mit weitergereichten Rechten: RESTRICT: Die REVOKE-Anweisung wird abgebrochen, wenn das Recht von dem User, dem es entzogen werden soll, an Dritte weitergegeben wurde. CASCADE: Die REVOKE-Anweisung setzt sich automatisch fort über alle entsprechenden Rechtevergaben durch den User an Dritte. GRANT OPTION FOR: Bei Nutzung dieser Schlüsselworte im Rahmen der REVOKE-Anweisung werden dem User nicht die Rechte an sich, sondern nur das Recht auf die Erteilung dieser Rechte entzogen. Schestag Datenbanken (Cnam) Kapitel 5-106
Rechtevergabe REVOKE (2) Beispiel t 0 besitzt Recht r besitzt Recht r user1 WITH GRANT OPTION user2 WITH GRANT OPTION t 1 besitzt Recht r GRANT r TO USER3 t 2 user3 besitzt Recht r GRANT r TO USER4 t 3 user4 besitzt Recht r GRANT r TO USER3 user3 zeit t Was geschieht, wenn user1 zu einem Zeitpunkt t 4 das Recht r zurück zieht? Schestag Datenbanken (Cnam) Kapitel 5-107
Rechtevergabe ROLE Um personen-unabhängig Rechte zu vergeben ist es seit SQL-99 möglich, Rollen zu generieren, für die man mit Hilfe der GRANT- und REVOKE- Anweisungen Rechte verwalten kann: Syntax: CREATE ROLE <Rollen-Name>; Ein bestimmter User wird mit Hilfe der GRANT-Anweisung einer (oder mehreren) Rolle(n) zugewiesen: Syntax: GRANT <Rollen-Name> TO <User>; Einer Rolle kann unabhängig davon, ob und wie viele Benutzer ihr gerade angehören, eine Menge von Rechten zugewiesen werden. Die Rechte einer bestimmten Person bestehen also aus den persönlichen Rechten und allen Rechten derjenigen Rollen, denen diese Person zugeordnet wurde. Zur Gewährleistung der Sicherheit von Datenbanken gibt es noch zahlreiche weiterführende Konzepte (vgl. hierzu die Literatur). Schestag Datenbanken (Cnam) Kapitel 5-108
Zusammenfassung Die standardisierte, mengenorientierte Data Sub Language SQL Structured Query Language kapselt den Zugriff auf die Objekte und Daten einer relationalen Datenbank. Im Zusammenhang mit DDL-Operationen werden Metadaten zur Struktur der Daten und der Datenbank im Systemkatalog gespeichert. Darüber hinaus können statistische Informationen zu den Daten durch entsprechende, explizit ausgeführte Jobs, im Systemkatalog ergänzt werden. Primary- und Foreign-Key-Contraints sind wirksame Methoden, die Eindeutigkeit der Datensätze bzw. die Integrität der Daten zu gewährleisten man spricht auch von referentieller Integrität. Mit Hilfe von Sichten (VIEW) und der Rechtevergabe können beliebig granular Zugriffsrechte auf Objekte der Datenbank vergeben werden. Schestag Datenbanken (Cnam) Kapitel 5-109
Datenbanken Einführung Semantische Datenmodellierung Relationenmodell Interne Datenorganisation SQL - Structured Query Language 6. ESQL, Stored Procedure und Trigger 7. Transaktionsmanagement 8. Objekt-relationales Mapping (eine Einführung) Schestag Datenbanken (Cnam) Kapitel 5-110