用于字符串操作的Sql Query性能?

时间:2010-11-19 18:55:11

标签: sql mysql sql-server database performance

我想在自连接条件操作中去掉varchar(255)字符串的最后4个字符。 这些字符串操作中的哪一个更快。

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)

或者我应该用其他方式,如果我考虑表现?

2 个答案:

答案 0 :(得分:2)

如果性能很重要,则将该子字符串放入其自己的字段中并将其编入索引。

比较您的选项,left(len())变体几乎肯定会比substring(reverse())变体更快,因为reverse()必须从原始变体创建一个新字符串,并且速度比获取长度。

而不是right(a.link, 4)呢?

答案 1 :(得分:0)

如果您真的关心性能,那么您使用适当的索引。创建一个计算的持久化列,将其编入索引并加入其中:

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;

这只是一个例子。在实际情况中,必须正确分析索引的正确形状和组成(例如,确定需要哪些其他列作为键,包括或过滤索引)。它的好处必须与增加的更新成本相平衡。

Designing Indexes是一个很好的起点。