2010-11-19 8 views
0

Je veux strip les 4 derniers caractères d'une chaîne varchar (255) dans une opération de condition de jointure automatique. laquelle de ces opérations de chaîne est plus rapide.Sql Performances de requête pour les opérations de chaînes de caractères?

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) 

ou je devrais utiliser d'une autre manière, si je considère la performance?

+5

On dirait quelque chose que vous pourriez micro-benchmark vous-même – Oded

+0

@@ Oded merci je le ferai. – ash

Répondre

0

Si vous vous souciez vraiment des performances, utilisez un index approprié. Créez une colonne persistante calculée, indexez-la et rejoignez-la:

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; 

Ceci est juste un exemple. Dans un cas réel, la forme et la composition correctes de l'index doivent être correctement analysées (par exemple, décider quelles autres colonnes sont nécessaires en tant que clés, inclure ou filtrer sur l'index). Ses avantages devront être mis en balance avec les coûts de mise à jour ajoutés.

Designing Indexes est un bon point de départ.

+0

@@ Remus merci. – ash

2

Si la performance est importante, vous mettez cette sous-chaîne dans son propre champ et l'indexez.

En comparant vos options la variante left(len()) sera certainement plus rapide que la variante substring(reverse()) depuis reverse() doit créer une nouvelle chaîne de l'original et sera plus lent que juste obtenir la longueur.

Qu'en est-il de right(a.link, 4) à la place?

+0

right (a.link, 4) est l'expression que OP veut _ignore_. – Axn

+0

la bonne fonction ne fonctionnera pas puisque j'ai besoin de la partie gauche. Merci pour le conseil. – ash

+0

Ah, raté la partie où vous vouliez enlever les 4 derniers caractères de la valeur d'origine. – VVS