Der beste Weg, um das Ende einer Zeichenfolge zu vergleichen, verwenden Sie RIGHT, LIKE oder andere?

8

Ich muss das Ende von Strings mit einer Liste von möglichen Enden in einer gespeicherten Prozedur vergleichen. Es wird viel genannt werden und es gibt etwa 10-15 Kandidatenendungen. An dieser Stelle ist eine Code-only-Lösung vorzuziehen, um dafür dedizierte Tabellen zu erstellen. Etwas, das wäre wie:

%Vor%

Ich suche den besten Weg in Bezug auf Geschwindigkeit, aber auch Wartbarkeit. Kandidaten, die ich kenne, sind

  • RECHTS, mein Liebling bisher, aber es bedeutet, dass ich die String-Länge hart codieren muss, so kann anfällig für Fehler sein. Es bedeutet auch, die Quellzeichen mehrmals zu schneiden.

    %Vor%
  • WIE, wahrscheinlich langsamer, aber ein bisschen sauberer

    %Vor%
  • CHARINDEX, wahrscheinlich langsamer, da es die ganze Zeichenfolge durchsucht

  • SUBSTRING, wahrscheinlich gleichwertig mit RIGHT und viel hässlicher

  • SQLCLR, um meinen eigenen ENDSWITH zu erstellen, kann es ziemlich schnell sein

Es könnte bessere Wege geben, von denen ich nichts weiß. Was denkst du?

    
Djof 12.09.2011, 21:28
quelle

3 Antworten

14

Der beste Weg, dies für SQL zu optimieren, könnte darin bestehen, den REVERSE String-Wert zu speichern eine andere Spalte, die indiziert ist und suchen Sie die linke Seite davon entweder mit LEFT oder LIKE.

    
Joe Stefanelli 12.09.2011, 21:35
quelle
2

Sie können auch eine Kombination aus RIGHT und LENGTH verwenden, damit Sie die Stringlänge nicht fest codieren.

    
Randy 12.09.2011 21:39
quelle
1

Das Analysieren von Strings hat einen Overhead, der beste Vorschlag ist das LIKE '% foo' ODER als Option. Bestimmte Indizes nutzen und suchen über Scans.

Sie müssten Benchmarks durchführen, um zu sehen, ob sie geeignet sind, aber leicht überprüfbar wären.

Überprüfen Sie dies in Bezug auf LIKE und INDEX Ссылка

    
Justin King 12.09.2011 21:51
quelle