Производительность сравнения SQL с использованием подстроки и подобного с подстановочным знаком

Я работаю над условием соединения между двумя таблицами, где один из столбцов для сопоставления является объединением значений. Мне нужно присоединить columnA из tableA к первым двум символам columnB из tableB.

Я разработал 2 разных оператора, чтобы справиться с этим, и попытался проанализировать производительность каждого метода.

Метод 1:

ON tB.columnB   like  tA.columnA || '%'

Метод 2:

ON substr(tB.columnB,1,2) = tA.columnA

План выполнения запроса содержит намного меньше шагов с использованием метода 1 по сравнению с методом 2, однако похоже, что метод 2 выполняется намного быстрее. Кроме того, в плане выполнения указан рекомендуемый индекс для метода 2, который может улучшить его производительность.

Я использую это на IBM iSeries, хотя мне были бы интересны ответы в общем смысле, чтобы узнать больше об оптимизации запросов sql.

Имеет ли смысл, что метод 2 будет выполняться быстрее?

Этот вопрос SO похож, но похоже, что никто не дал конкретных ответов на разницу в производительности этих подходов: Сравнение скорости T-SQL между оператором LEFT () и LIKE .

PS: Дизайн таблицы, требующий этого типа соединения, не является чем-то, что я могу изменить в настоящее время. Я понимаю, что было бы предпочтительнее разделить поля, содержащие разные типы данных.

6
задан Community 23 May 2017 в 12:01
поделиться