Montag, August 29, 2016

Zerlegung von Strings

Stew Ashton hat in jüngerer Vergangenheit eine ganze Reihe interessanter Lösungen zum Problem der Zerlegung von Strings in einzelne Token in SQL vorgestellt. Die klassischen Lösungen dafür sind die (in der Regel auf Tom Kyte zurückgeführte) Kombination von instr und substr (die kurz vor 400 Bytes an ihre Grenzen stösst), sowie der Einsatz von regexp_substr, der - wie alle regexp-Operationen recht kostspielig im Hinblick auf die Nutzung der CPU-Ressourcen ist:
  • New, Improved IN Lists!: zeigt ein - auf Grundlage einer Präsentation von Connor McDonald - entwickeltes Vorgehen, das eine Kombination des row-Generators (connect by level) mit der instr- und der analytischen lead-Funktion verwendet. Das Ergebnis ist bereits recht kompakt und lesbar.
  • Splitting Strings: Surprise!: liefert einige zusätzliche Alternativen durch die Verwendung von XMLTABLE und insbesondere durch die zugehörige ora:tokenize Funktion.
  • Splitting Strings: Proof!: zeigt, dass ora:tokenize nicht nur eine kompakte Lösung darstellt, sondern auch deutlich schneller arbeitet als regexp_substr (erwartungsgemäß sehr langsam) und substr+instr (deutlich langsamer als ora:tokenize, wenn die Anzahl der Substrings, die zerteilt werden sollen, relativ groß ist).
  • Splitting Strings: PL/SQL: zeigt, dass die String-Zerlegung ein Fall ist, in dem PL/SQL schneller ist als SQL. Das kommt nicht besonders oft vor, ist aber auch nicht völlig unüblich.
Ich würde mich nicht wundern, wenn der der Herr Ashton weitere Artikel ergänzen würde - und mein Bestes versuchen, sie hier gegebenenfalls einzufügen.

Keine Kommentare:

Kommentar veröffentlichen