Оптимизация DB2 для предиката IN традиционно была склонна к неправильной оценке мощности набора результатов.С предикатом IN он мог бы иногда оптимизироваться для получения большего количества результатов, чем это было бы разумно.
Кроме того, он работает точно так, как писал Мартин Смит выше, - выполняя 3 отдельных индексированных запроса по порядку.Это можно исправить, включив оптимизацию
db2set DB2_INLIST_TO_NLJN=true
, которая заставляет DB2 создать временную виртуальную таблицу и выполнить объединение с вложенным циклом (во многих случаях очень эффективный вариант) или путем переключенияна другой вид запроса, такой как ранжированная версия.Вы также можете подтолкнуть DB2 к использованию версии с вложенным циклом, такой как
select col1, col2, col3
from employee, (values 1,2,3) as v(ids)
where employee_id=v.ids
. Имейте в виду, что все это несколько академично, если у вас нет значительного количества элементов в запросе IN и строк в целевом объекте.таблица, и приходится выполнять большое количество таких запросов.