Попробуйте выполнить этот запрос в SQL Server Management Studio с включенным включением фактического плана выполнения. Посмотрите, выполняет ли внутренний выбор поиск по этим ключам.
Я настроил тестовый пример с 3 таблицами, у которых в качестве кластерного первичного ключа был указан идентификатор. План выполнения действительно показывает поиск кластеризованного индекса по трем выбранным идентификаторам.
Однако, если вы действительно хотите быть уверены, что внутренние запросы оптимизируют свои планы таким образом, вы можете поместить предложение WHERE в каждый подзапрос. Например:
select * from
(
select Id from table1 where Id in (1,2,3)
union all
select id from table2 where Id in (1,2,3)
union all
select id from table3 where Id in (1,2,3)
) as X
Также обратите внимание, что вышеприведенный union all
потенциально вернет дубликаты, если более одной из таблиц имеют совпадающий Id
. Если это проблема, вы можете изменить union all
на union
следующим образом.
select * from
(
select Id from table1 where Id in (1,2,3)
union
select id from table2 where Id in (1,2,3)
union
select id from table3 where Id in (1,2,3)
) as X
Я не могу гарантировать такое поведение в других системах БД, но я был бы удивлен, если бы их оптимизаторы запросов не делали то же самое.