von Markus Winand.

Mathematik


Es gibt noch eine weitere Gruppe von Verschleierungen, die zwar schlau sind, aber die Indexnutzung unterbinden können. Anstatt logischer Aus­drücke verwendet man dabei Mathematik.

Kann diese Abfrage wohl einen Index auf NUMERIC_NUMBER nutzen?

SELECT numeric_number
  FROM table_name
 WHERE numeric_number - 1000 > ?

Oder kann diese Abfrage vielleicht einen Index auf A oder B verwenden?

SELECT a, b
  FROM table_name
 WHERE 3*a + 5 = b

Betrachten wir diese Fragen aus dem Blickwinkel eines Datenbank­her­stel­lers. Würden wir wohl einen Gleichungslöser mit einbauen? Die meisten Hersteller beantworten diese Frage mit einem klaren „Nein!“ Daher wird bei den Beispielen oben kein Index benutzt.

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.

Natürlich kann man mit dieser Methode auch absichtliche Verstüm­mel­ungen durchführen. Ähnlich, wie wir es zuvor für LIKE-Abfragen getan haben. Dafür kann man zum Beispiel Null addieren:

SELECT numeric_number
  FROM table_name
 WHERE numeric_number + 0 = ?

Mit einem Funktions-basierten Index kann man all diese Beispiele indi­zie­ren. Ja sogar das zweite Beispiel kann man in­di­zie­ren, wenn man die Mathe­matik schlau anwendet und die Bedingung wie eine Gleichung umformt:

SELECT a, b
  FROM table_name
 WHERE 3*a - b = -5

Man bringt also alle Tabellenspalten auf die eine Seite, die Konstanten auf die andere. Für den linken Teil der Gleichung kann man dann einen Funktions-basierten Index anlegen:

CREATE INDEX math ON table_name (3*a - b)
Vorherige SeiteNächste Seite

Du kannst nicht alles an einem Tag lernen. Abonniere den Newsletter via E-Mail, Twitter oder RSS um sukzessive aufzuholen. Und sieh dir auch modern-sql.com an.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„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 und DSGVO | CC-BY-NC-ND 3.0 Lizenz