DB2 10 для Z/OS, SQL LIKE Значение столбца плюс подстановочный знак DB2 без потери этапа 1

Итак, это связано с SQL LIKE Столбец Value Plus подстановочный знак DB2, но более конкретный вопрос б / к ОС

Итак, я хочу:

select a.columnA
       b.columnZ
from a
join table b
  on b.columnB LIKE a.columnA || '%'

b.columnB - это индекс, и я хотел бы, чтобы соединение было выполнено с использованием этого (b/c это массивная таблица). Но, к сожалению, z/OS не позволяет использовать столбец справа от LIKE.

Из другого поста я понимаю, что могу использовать LOCATE, но это скалярная функция, и поэтому она не считается предикатом стадии 1, поэтому я теряю значение индекса.

1 ответ

Одним из вариантов является использование предиката диапазона и объединение высоких значений в конец значения столбца для верхнего конца диапазона. Это эквивалентно аналогичному предикату:

select a.columnA
       b.columnZ
from a
join table b
  on b.columnB >= a.columnA 
 and b.columnB <  a.columnA || x'FF'

Это то, что мы часто используем, когда я работаю специально, чтобы иметь возможность использовать индексы для частичного совпадения значений, как это.

Другие вопросы по тегам