IN
операции обычно медленные.Передача 1000 параметров на любой запрос звучит ужасно.Если вы можете избежать этого, сделайте это.Теперь я действительно хотел бы попробовать временную таблицу.Вы даже можете поиграть с индексированием таблицы.Я имею в виду, вместо того, чтобы просто вводить значения, играйте с индексами, которые помогут вам оптимизировать ваши поиски.
С другой стороны, добавление с индексами медленнее, чем без индекса.Пройди там эмпирическое испытание.Теперь, что я считаю обязательным, имейте в виду, что при использовании другой таблицы вам не нужно использовать предложение IN
, поскольку вы можете использовать предложение EXISTS
, что обычно приводит к повышению производительности.IE:
select * from yourTable yt
where exists (
select * from yourTempTable ytt
where yt.id = ytt.id
)
Я не знаю ни вашего запроса, ни данных, но это дало бы вам представление о том, как это сделать.Обратите внимание, что внутренний select *
так же быстр, как select aSingleField
, так как ядро базы данных оптимизирует его.
Это все мои мысли.Но помните, чтобы быть на 100% уверенным в том, что лучше для вашей проблемы, нет ничего лучше, чем выполнять оба теста и рассчитывать их время :) Надеюсь, это поможет.