Sql Производительность запросов для строковых операций? - PullRequest
0 голосов
/ 19 ноября 2010

Я хочу удалить последние 4 символа строки varchar (255) в операции условия самостоятельного соединения.какая из этих строковых операций быстрее.

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 ]

2 голосов
/ 19 ноября 2010

Если важна производительность, вы помещаете эту подстроку в ее собственное поле и индексируете ее.

При сравнении ваших вариантов вариант left(len()) почти наверняка будет быстрее, чем вариант substring(reverse()), поскольку reverse() должен создать новую строку из исходной и будет медленнее, чем просто получение длины.

А как же right(a.link, 4) вместо?

0 голосов
/ 19 ноября 2010

Если вы действительно заботитесь о производительности, тогда вы используете правильный индекс. Создайте вычисляемый постоянный столбец, индексируйте его и присоединитесь к нему:

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;

Это всего лишь пример. В реальном случае правильная форма и состав индекса должны быть должным образом проанализированы (например, решить, какие другие столбцы необходимы в качестве ключей, включить или отфильтровать индекс) Его преимущества должны быть сбалансированы с добавленными затратами на обновление.

Разработка индексов - хорошее место для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...