Views/Indexe 5 Views/Indexe Views

Werbung
Views/Indexe
5 Views/Indexe
Views - Benutzersichten
Erstellen:
CREATE VIEW [benutzer.]view_name [(spalten_liste)]
AS select_anw
- Einschränkungen: Die SELECT-Anweisung innerhalb CREATE VIEW
darf den UNION-Operator und die ORDER-BY-Klausel nicht enthalten.
Die SELECT-Anweisung innerhalb CREATE VIEW
darf die DISTINCT-Angabe nicht enthalten.
Abfragen:
Jede Abfrage auf eine View wird vom SQL Server in eine entsprechende
Abfrage auf die zugrundeliegende Basistabelle umgewandelt.
INSERT-Anweisung und Views:
- Wenn die View aus mehreren Tabellen abgeleitet ist, darf das
Einfügen der Zeilen nur erfolgen, falls ausschliesslich die Zeilen einer einzigen
Tabelle in der Projektion der SELECT-Anweisung angegeben sind.
- Keine Spalte der View darf aus einer Aggregatfunktion abgeleitet werden.
- Keine Spalte der View darf aus einer Konstanten oder einem
arithmetischen Ausdruck abgeleitet werden.
- Die SELECT-Anweisung innerhalb CREATE VIEW darf die Angabe
DISTINCT nicht enthalten.
- Die View, die mit Hilfe einer SELECT-Anweisung und Join definiert
ist, darf die WITH CHECK-Option nicht enthalten.
UPDATE-Anweisung und Views:
- Wenn die View aus mehreren Tabellen abgeleitet ist, darf das
Einfügen der Zeilen nur erfolgen, falls ausschliesslich die Zeilen einer einzigen
Tabelle in der Projektion der SELECT-Anweisung angegeben sind.
- Keine Spalte der View darf aus einer Aggregatfunktion abgeleitet werden.
- Keine Spalte der View darf aus einer Konstanten oder einem
arithmetischen Ausdruck abgeleitet werden.
- Die SELECT-Anweisung innerhalb CREATE VIEW darf die Angabe
DISTINCT nicht enthalten.
DELETE-Anweisung und Views:
- Wenn die View aus mehreren Tabellen abgeleitet ist, darf das Löschen der Zeilen
nur erfolgen, falls ausschliesslich die Zeilen einer einzigen Tabelle in der Projektion
der SELECT-Anweisung angegeben sind.
- Keine Spalte der View darf aus einer Aggregatfunktion abgeleitet werden.
TFH Berlin/Steyer
5-1
Views/Indexe
Indexe - Anfrageoptimierung
Erstellen:
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name
ON tab_name(spalte_1 [,spalte_2,...])
[WITH {FILLFACTOR=n, IGNORE_DUP_KEY, SORTED_DATA,
IGNORE_DUP_ROW|ALLOW_DUP_ROW]}]
[ON segment]
Nur der Eigentümer einer Tabelle darf einen Index für sie erstellen
(und diesen später wieder löschen).
UNIQUE legt fest, dass jeder Datenwert nur einmal in der indizierten
Spalte vorkommen darf.
Bei der CLUSTERED-Angabe werden alle Zeilen einer Tabelle in der
Reihenfolge des Index intern (physikalisch) sortiert.
Die Angabe FILLFACTOR=n definiert den Prozentsatz des belegten
Speichers jeder Indexseite beim Erstellen des Index. n=100 empfiehlt
sich nur für statische Tabellen.
Beispiel:
CREATE UNIQUE INDEX i_arb_mpr
ON arbeiten (m_nr, pr_nr)
WITH FILLFACTOR=80
Das Erstellen eines UNIQUE-Index für eine Spalte ist nicht möglich,
falls diese Spalte mehrfach vorhandene Werte enthält. Im folgenden
Beispiel wird die Möglichkeit gezeigt, wie mehrfach vorhandene
Werte einer Spalte gefunden und entfernt werden können, damit
anschliessend ein UNIQUE-Index für diese Spalte erstellt werden kann.
create view v_hilftab (m_nr, max_dat)
as select m_nr, max(einst_dat)
from arbeiten
group by m_nr
having count(*) > 1
delete from arbeiten
where exists
(select * from v_hilftab
where arbeiten.m_nr = v_hilftab.m_nr)
and arbeiten.einst_dat <
(select max_dat
from v_hilfdat
where arbeiten.m_nr = v_hilftab.m_nr)
(4 rows affected)
Entferne alle Zeilen der Tabelle arbeiten bis auf die Zeilen,
die für jeden Mitarbeiter das jüngste Einstellungsdatum enthalten.
TFH Berlin/Steyer
5-2
Herunterladen