2016-05-20 5 views
0

Bei zwei Tabellen, T1 mit Spalte a und T2 mit Spalte b, ist es möglich, einen Index auf eine Summe von Spalten T1.a + T2.b anzuwenden? Ich habe kürzlich eine Frage zu diesem Index bekommen und war ziemlich überrascht, da die Frage nicht war, ob es möglich war (was ich nicht glaube), sondern eher eine Beispielabfrage beschleunigen würde. Wenn es möglich ist, was genau indexieren wir? Wäre es in Abfragen wie WHERE T1.a+T2.b = 3 oder in einigen anderen Fällen hilfreich? Vielen Dank!SQL-Index auf eine Summe von Spalten - ist das möglich?

+3

Index sind produktspezifisch, welche DBMS verwenden Sie? – jarlh

+0

Die Frage sollte implementierungsunabhängig sein und für alle dbms-s gelten. Nehmen wir einmal Oracle an, denn das ist, glaube ich, der Fragesteller täglich. – Marcin

+1

Aber es ist nicht auf alle dbms anwendbar. – jarlh

Antwort

1

Ja, die meisten (nicht alle) Datenbanksysteme ermöglichen es Ihnen, einen Index für das Ergebnis eines Ausdrucks zu erstellen, sodass in diesen Systemen ein Index für die Summe zweier Spalten erstellt werden kann.

Wäre es in Abfragen wie WHERE T1.a+T2.b = 3 oder in einigen anderen Fällen hilfreich?

Das hängt vollständig von der Abfrage ab, und welchen Plan der Compiler verwendet, um die Abfrage auszuwerten. Wenn Sie nach der Summe von zwei Spalten filtern und es relativ wenige Datensätze gibt, die diese Kriterien erfüllen, dann wird ein Index die Anzahl der zu durchsuchenden Datensätze verringern, um passende Datensätze zu finden.

1

Je nach Ihrem SQL-Produkt könnte es möglich sein, eine Ansicht zu indizieren, die eine Gruppe enthalten kann, um die persistenten Zusammenfassungswerte zu erhalten.

JEDOCH

Dies ist eine lokale Optimierung (google „kein freies Mittagessen“), so dass es in schneller wählen Leistung für Sie auf Kosten der langsameren Einfügungen und Aktualisierungen für andere führen.

+0

Also angenommen, dass es in einem gegebenen dbms möglich ist, würde dieser Index die Abfrage mit der 'WHERE'-Klausel von' T1.a + T2.b = x' beschleunigen? Oder wäre es in einem anderen Fall nützlich oder gar nicht? – Marcin

Verwandte Themen