Die Frage betrifft Oracle8i/9i
In einer Applikation wird folgende Abfrage verwendet:
SELECT * FROM sample
WHERE UPPER(‚Zeichenkette‘) LIKE sample.spalte
Spalte beinhaltet Vergleichswerte mit %-Patterns, z.b.: „%“, „%text%“ oder „%beispiel“. Durch die %-wildcards am Anfang der Spalte kann Oracle keinen Index für die Suche verwenden und führt einen Fulltablescan aus. Bei 1000 und mehr Datensatzen in der Tabelle sample werden die Antwortzeiten deutlich länger.
Meiner Überlegungen gehen nun dahin, das % nach Möglihckeit weg zu optimieren. Dazu möchte ich die Zeichenketten aufteilen. „%text%“ wird auf zwei Spalten aufgeteilt, jeweils „et%“ (erste hälfte, rückwärts) und „xt%“ (zweite hälfte). Wie die Aufteilung im Detail funktioniert, soll an dieser Stelle nicht weiter interessieren. Als Ergebnis erhalte ich aber zwei Spalten die entweder ein „%“ oder „%“ erhalten. Ein „%“ wird es aber nicht mehr geben.
Die neue Datenbankabfrage sieht dann wie folgt aus:
SELECT * FROM sample
WHERE UPPER(’