Beschreiben von Datenbankobjekten

Abgeschlossen

Zusätzlich zu Tabellen kann eine relationale Datenbank andere Strukturen enthalten, die helfen, die Datenorganisation zu optimieren, programmgesteuerte Aktionen zu kapseln und die Zugriffsgeschwindigkeit zu verbessern. In dieser Lektion lernen Sie drei dieser Strukturen ausführlicher kennen: Ansichten, gespeicherte Prozeduren und Indizes.

Was ist eine Sicht?

Eine Ansicht ist eine virtuelle Tabelle, die auf den Ergebnissen einer SELECT-Abfrage basiert. Sie können sich eine Sicht wie ein Fenster für angegebene Zeilen in einer oder mehr zugrunde liegenden Tabellen vorstellen. Sie können z. B. eine Ansicht in den Tabellen "Bestellung " und " Kunde " erstellen, die Bestell- und Kundendaten abrufen, um ein einzelnes Objekt bereitzustellen, das das Ermitteln von Lieferadressen für Bestellungen erleichtert:

CREATE VIEW Deliveries
AS
SELECT o.OrderNo, o.OrderDate,
       c.FirstName, c.LastName, c.Address, c.City
FROM Order AS o JOIN Customer AS c
ON o.Customer = c.ID;

Sie können die Sicht wie eine Tabelle abfragen und die Daten filtern. Die folgende Abfrage sucht nach Details zu Bestellungen für Kunden, die in Seattle leben:

SELECT OrderNo, OrderDate, LastName, Address
FROM Deliveries
WHERE City = 'Seattle';

Was ist eine gespeicherte Prozedur?

Eine gespeicherte Prozedur definiert SQL-Anweisungen, die für den Befehl ausgeführt werden können. Gespeicherte Prozeduren werden verwendet, um programmgesteuerte Logik in einer Datenbank für Aktionen zu kapseln, die Anwendungen zum Arbeiten mit Daten ausführen müssen.

Sie können eine gespeicherte Prozedur mit Parametern definieren, um eine flexible Lösung für allgemeine Aktionen zu erstellen, die möglicherweise auf Daten basierend auf einem bestimmten Schlüssel oder bestimmten Kriterien angewendet werden müssen. Beispielsweise kann die folgende gespeicherte Prozedur definiert werden, um den Namen eines Produkts basierend auf der angegebenen Produkt-ID zu ändern.

CREATE PROCEDURE RenameProduct
	@ProductID INT,
	@NewName VARCHAR(20)
AS
UPDATE Product
SET Name = @NewName
WHERE ID = @ProductID;

Wenn ein Produkt umbenannt werden muss, können Sie die gespeicherte Prozedur ausführen und dabei die ID des Produkts und den neuen Namen übergeben, der zugewiesen werden soll:

EXEC RenameProduct 201, 'Spanner';

Was ist ein Index?

Ein Index unterstützt Sie bei der Suche nach Daten in einer Tabelle. Sie können sich einen Index für eine Tabelle wie einen Index am Ende eines Buchs vorstellen. Ein Buchindex enthält eine sortierte Sammlung von Verweisen mit den Seiten, auf denen die Verweise auftreten. Wenn Sie einen Verweis auf ein Element im Buch suchen, können Sie den Index durchsuchen. Sie können die Seitenzahlen im Index verwenden, um direkt die richtigen Seiten im Buch zu finden. Ohne einen Index müssten Sie womöglich das gesamte Buch lesen, um die Verweise zu finden, die Sie suchen.

Wenn Sie einen Index in einer Datenbank erstellen, geben Sie eine Spalte aus der Tabelle an, und der Index enthält eine Kopie dieser Daten in einer sortierten Reihenfolge mit Zeigern auf die entsprechenden Zeilen in der Tabelle. Wenn der Benutzer eine Abfrage ausführt, die diese Spalte in der WHERE-Klausel angibt, kann das Datenbankverwaltungssystem diesen Index verwenden, um die Daten schneller abzurufen, als wenn die gesamte Tabellenzeile nach Zeile durchsucht werden musste.

Sie können z. B. den folgenden Code verwenden, um einen Index in der Spalte "Name " der Tabelle "Product " zu erstellen:

CREATE INDEX idx_ProductName
ON Product(Name);

Der Index erstellt eine strukturbasierte Struktur, die der Abfrageoptimierer des Datenbanksystems verwenden kann, um Zeilen in der Produkttabelle basierend auf einem angegebenen Namen schnell zu finden.

Screenshot eines Beispielindexes, der eine baumartige Struktur erstellt.

Für eine Tabelle mit wenigen Zeilen ist die Verwendung des Index wahrscheinlich nicht effizienter, als einfach die gesamte Tabelle zu lesen und die von der Abfrage angeforderten Zeilen zu suchen (in diesem Fall ignoriert der Abfrageoptimierer den Index). Wenn eine Tabelle jedoch viele Zeilen enthält, können Indizes die Leistung von Abfragen erheblich verbessern.

Sie können viele Indizes für eine Tabelle erstellen. Wenn Sie also auch Produkte basierend auf dem Preis finden möchten, kann es hilfreich sein, einen weiteren Index für die Spalte "Preis " in der Tabelle " Artikel " zu erstellen. Allerdings sind Indizes nicht kostenlos. Ein Index verbraucht Speicherplatz, und jedes Mal, wenn Sie Daten in eine Tabelle einfügen, in dieser aktualisieren oder löschen, müssen die Indizes für diese Tabelle beibehalten werden. Diese zusätzliche Arbeit kann Einfüge-, Aktualisierungs- und Löschvorgänge verlangsamen. Sie müssen ein Gleichgewicht zwischen Indizes, die Ihre Abfragen beschleunigen, und den Kosten für die Ausführung anderer Vorgänge finden.