Выполнение запроса "в" состоянии в db2 - PullRequest
1 голос
/ 26 августа 2011

Я хочу получить приведенные ниже данные из таблицы в базе данных DB2.

select col1, col2, col3 from employee where employee_id in (1,2,3)

Пожалуйста, поделитесь своими мыслями о выполнении запроса? Есть альтернативы?

1 Ответ

2 голосов
/ 29 августа 2011

Оптимизация 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 и строк в целевом объекте.таблица, и приходится выполнять большое количество таких запросов.

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