von Markus Winand.

Funktionen


Der Index auf LAST_NAME hat die Abfrage zwar erheblich beschleunigt, setzt aber voraus, dass die Groß- und Kleinschreibung bei der Suche übereinstimmt. Dieser Abschnitt zeigt, wie man diese Einschränkung durch Funktions-basierende Indizierung aufheben kann, ohne dabei Per­for­mance einzubüßen.

DB2

DB2 auf zOS unterstützt funktions-basierte Indizierung seit einiger Zeit, aber erst seit Version 10.5 auf LUW. Benutzer-definierte Funktionen können in Indizes nicht verwendet werden.

Als Alternative kann man der Tabelle eine neue Spalte hinzufügen, die das Ergebnis des Funktionsausdruckes enthält. Diese Spalte muss man bei Änderungen unbedingt aktuell halten. Zum Beispiel mit einem Datenbank-Trigger. Die neue Spalte kann man dann ganz normal indizieren. In der where-Klausel verwendet man dann einfach die neue Spalte (ohne der Funktion).

MySQL

MySQL Suchen ignorieren die Groß- und Kleinschreibung per Default. Das kann man allerdings auf Spaltenebene abstellen. Ab Version 5.7 kann MySQL generierte Spalten indizieren.

Als Alternative kann man bei älteren Versionen der Tabelle eine neue Spalte hinzufügen, die das Ergebnis des Funktionsausdruckes enthält. Diese Spalte muss man bei Änderungen unbedingt aktuell halten. Zum Beispiel mit einem Datenbank-Trigger. Die neue Spalte kann man dann ganz normal indizieren. In der where-Klausel verwendet man dann einfach die neue Spalte (ohne der Funktion).

Oracle

Die Oracle Datenbank unterstützt funktions-basierende Indizes seit Release 8i. Virtuelle Spalten (virtual column) wurden mit Version 11g eingeführt.

PostgreSQL

PostgreSQL unterstützt Indizes auf Ausdrücken seit Version 7.2 teilweise und seit Version 7.4 vollständig (Indexes on Expressions).

SQL Server

SQL Server unterstützt Berechnete Spalten (Computed Columns), die Indizierbar sind, seit Release 2000.

Wenn dir gefällt, wie ich die Dinge erkläre, wirst du meine Kurse lieben.

Inhalt

  1. Groß- und Kleinschreibung ignorierenUPPER und LOWER

  2. Benutzerdefinierte Funktionen — Grenzen der Indizierbarkeit

  3. Über-Indizierung — Vermeide Redundanzen

Vorherige SeiteNächste Seite

Über den Autor

Foto von Markus Winand

Markus Winand lehrt effizientes SQL – inhouse und online. Er minimiert die Entwicklungszeit durch modernes SQL und optimiert die Laufzeit durch schlaue Indizierung – dazu hat er auch das Buch SQL Performance Explained veröffentlicht.

„Use The Index, Luke!“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz | CC-BY-NC-ND 3.0 Lizenz