Wenn man sich das erste Mal mit Funktions-basierten Indizes beschäftigt, ist die Versuchung groß, alles Mögliche zu indizieren. Dabei kann es aber leicht passieren, dass man redundante Indizes anlegt.
Hinweis in eigener Sache
Ich biete SQL Schulungen, Optimierung und Beratung an. Auch der Kauf meines Buches „SQL Performance Explained“ (ab €9,95) unterstützt meine Arbeit an dieser Webseite.
Um die Groß- und Kleinschreibung zu ignorieren, könnte man statt der oben benutzten UPPER
-Funktion auch die LOWER
-Funktion verwenden:
SELECT first_name, last_name, phone_number
FROM employees
WHERE LOWER(last_name) = LOWER('winand')
Ein einzelner Index reicht dann nicht aus, beide Abfrage-Varianten abzudecken. Natürlich könnte man einen zweiten Index auf LOWER(last_name)
anlegen. Das bedeutet aber, dass die Datenbank bei jeder insert
-, update
- oder delete
-Anweisung beide Indizes aktualisieren muss (siehe Kapitel 8, „Schreiboperationen“). Damit ein Index genügt, ist es also besser, immer dieselbe Funktion zu verwenden.
Tipp
Vereinheitliche die Zugriffswege, damit ein Index von mehreren Abfragen genutzt werden kann.
Warnung
UPPER
und LOWER
werden von ORM-Tools manchmal ohne Wissen der Entwickler verwendet. Hibernate verwendet zum Beispiel die LOWER
-Funktion, um Case-insensitive Suchen umzusetzen.
Tipp
Versuche immer die Original-Daten zu indizieren. Das ist meist die nützlichste Information, die man in den Index aufnehmen kann.