Когда я использую select * from view where столбец в (xxxx) и использую подзапрос, который представляет собой простой список идентификаторов, его выполнение занимает почти в 1000 раз больше времени, чем просто ввод списка чисел, пример ниже.
A) занимает 0 мс для выполнения
SELECT Name FROM TMS.dbo.vPerson p WHERE p.personid IN (1,2,3,4)
B) занимает 3200 мс для выполнения
SELECT personid INTO #persons FROM tcPerson p WHERE p.personid IN (1,2,3,4)
SELECT Name FROM TMS.dbo.vPerson p
WHERE p.personid IN (SELECT personid FROM #persons)
Я каждый раз очищал кеш, но, похоже, нет веской причины, почему это занимает так много времени.
временная таблица буквально представляет собой список из 4 идентификаторов. его созданием можно пренебречь, а подбором значений в запросе where можно пренебречь
Вся помощь будет высоко оценена.
tcPerson
?) и есть ли индекс дляpersonid
? Как ВЗГЛЯД? - person Shnugo   schedule 17.03.2016IN
; 2. Сравните фактические планы запросов (включая фактический план) между временной таблицей и запросами с явными значениями и сравните фактическое и расчетное количество строк. - person Nick.McDermaid   schedule 17.03.2016