Rolf B: Oracle DB: mind. 7 aufeinanderfolgende Zeichen aus x sollen in y vorkommen ...

Beitrag lesen

Hallo Andreas,

das ist auf jeden Fall ein Full Table Scan. Dass ein OR generell dazu neigt, Table Scans zu erzeugen, ist bekannt. Dass eine LIKE-Suche ebenfalls zu Fullscans neigt, ist leider auch bekannt.

Ich würde aber zunächst mal schauen, ob Oracle Dir einen Volltext-Index für diese Spalte anbietet und ob damit bessere Ergebnisse erzielt werden als mit einer LIKE-Suche auf ein Septett. Dass Du alle möglichen Septette durchgehen musst, wird sich nicht vermeiden lassen, aber ein Volltext-Index ist für eine Suche mitten im Text optimiert.

Wenn das nichts bringt, könntest Du eine Hilfstabelle anlegen. In die stellst Du für je Row der Haupttabelle eine Zeile für jedes mögliche Septett der dbspalte ein und ordnest ihm die ID dieser Zeile zu (wenn's denn eine gibt). Wenn der Key der Haupttabelle umfangreich ist, ist das natürlich umständlich, aber ich bin sicher, Du hast eine Idee, wie Du effizient aus einem Treffer in der Hilfstabelle die passende Row in der Haupttabelle findest.

Die Hilfstabelle kannst du dann mit einem Primärindex auf die Septette versehen und dann ist es für jedes mögliche Septett aus der Eingabe nur noch ein Index Seek und kein Full Table Scan mehr.

Auf die Haupttabelle legst Du dann Trigger, der nach jedem INSERT die nötigen Septette in die Hilfstabelle schreibt, bei jedem DELETE die obsoleten Septette entfernt und bei jedem UPDATE schaut, ob sich die Suchspalte geändert hat und im Ja-Fall die Septette erneuert. Das dürfte einer Stored Procedure bedürfen. Mit T-SQL wüsste ich, wie das geht, Oracle hat dafür seine eigene Syntax und Prozedursprache.

Die Alternative zum Online-Update durch Trigger wäre ein nächtlicher Batchlauf, der die Hilfstabelle neu aufbaut.

Möglicherweise kann man auch geschickter vorgehen und nicht alle Septette einbauen, aber dafür müsste ich mir erstmal länger Gedanken machen. Ich denke da an das Speichern von Triplets, die an strategischen Positionen in der dbspalte stehen. Das könnte die Hilfstabelle verkleinern - aber es wird die Suche nicht beschleunigen.

Wie gesagt: ein "Volltext-Index" Feature sollte die beste Lösung darstellen.

Rolf

--
sumpsi - posui - obstruxi