Ein Index in seiner grundlegendsten Form ist nur die sortierte Spalte Daten, so dass es leicht, um einen Wert zu suchen. Zum Beispiel kann ein Lehrbuch die Seiten in einer bestimmten Reihenfolge haben, aber dann einen Index auf der Rückseite für alle Begriffe haben. Wie Sie sehen, werden die Daten vorberechnet/sortiert und in einem separaten Bereich gespeichert.
Wenn Sie eine Funktion auf die Spalte anwenden und versuchen, basierend auf der Ausgabe zu suchen/zu filtern, ist der Index nicht länger nützlich. Lassen Sie uns noch einmal unser Buchbeispiel betrachten und sagen, dass die Funktion, die wir anwenden, die Umkehrung des Ausdrucks ist (so wird reverse('integral')
zu 'largetni'
). Sie werden diesen Wert nicht im Index finden, also müssen Sie alle Begriffe nehmen, sie durch die Funktion setzen und erst dann vergleichen. Alles zur Abfragezeit. Ursprünglich konnten wir die Suche nach i
, dann in
, dann int
und so weiter überspringen, so dass es einfach ist, den Begriff zu finden, so dass die Funktion alles viel langsamer machte.
Wenn Sie häufig mit dieser Funktion abfragen, können Sie einen Index mit reverse(term)
vorzeitig erstellen, um die Suche zu beschleunigen. Aber ohne es explizit zu tun, wird es immer langsam sein.
Es gibt zumindest in Oracle Funktionsindizes. Das ist vielleicht eine der Ausnahmen hier und da :-) –