Sql Abfrageleistung für Stringoperationen?

Ich möchte die letzten 4 character einer Varchar (255) String in einer Selbstverknüpfungsbedingungsoperation abstreifen. welcher dieser String-Operation ist schneller.

Example: link field 1, '100-200-300-' 2, '100-200-400-' 3, '100-200-300-400-' 1. left(a.link, len(a.link)-4) = left(b.link, len(b.link)-4) // OR 2. substring(reverse(a.link), 4, 255) = substring(reverse(b.link), 4, 255) 

oder ich sollte einen anderen path verwenden, wenn ich die performance betrachte?

Wenn Sie sich wirklich um performance kümmern, dann verwenden Sie einen richtigen Index. Erstellen Sie eine berechnete persistierte Spalte, indizieren Sie sie und verbinden Sie sie:

 alter table tablename add sublink = left(a.link, len(a.link)-4) persisted; create index indexname on tablename(sublink); ... select... from... join... on a.sublink = b.sublink; 

Das ist nur ein Beispiel. In einem echten Fall müsste die korrekte Form und Zusammensetzung des Indexes richtig analysiert werden (z. B. entscheiden, welche anderen Spalten als Schlüssel benötigt werden, den Index einschließen oder filtern). Seine Vorteile woudl müssen gegen die aktualisierten Kosten ausgeglichen werden.

Entcasting von Indizes ist ein guter Ort zum Starten.

Wenn performance wichtig ist, setzen Sie diesen Teilstring in sein eigenes Feld und indexieren es.

Beim Vergleich Ihrer Optionen ist die left(len()) Variante fast sicherer schneller als die substring(reverse()) Variante, da reverse() einen neuen String aus dem Original erstellen muss und langsamer sein wird als nur die Länge.

Was ist mit right(a.link, 4) stattdessen?