2012-02-09 2 views
0

Я читал, что создание временной таблицы лучше, если количество параметров, переданных в критериях IN, велико. Это для выбранных запросов. Это верно для запросов на обновление? У меня есть запрос на обновление, который использует 3 объединения таблиц (Inner Joins) и передает 1000 параметров в критериях IN, и этот запрос выполняется в цикле 200 или более раз. Каков наилучший подход для выполнения этого запроса?IN Критерий производительности для операции обновления в MySQL

ответ

1

IN операции обычно медленные. Передача 1000 параметров на любой запрос звучит ужасно. Если вы можете этого избежать, сделайте это. Теперь, я бы действительно пошел с temp-таблицей. Вы даже можете играть с индексированием таблицы. Я имею в виду, вместо того, чтобы просто вкладывать в него значения, играйте с индексами, которые помогут вам оптимизировать ваши поиски.

С другой стороны, добавление индексами происходит медленнее, чем добавление без индексов. Пойдите для эмпирического испытания там. Теперь, я думаю, необходимо, помните, что при использовании другой таблицы вам не нужно использовать предложение IN, потому что вы можете использовать предложение EXISTS, которое обычно приводит к лучшей производительности. I.E .:

select * from yourTable yt 
where exists (
    select * from yourTempTable ytt 
    where yt.id = ytt.id 
) 

Я не знаю вашего запроса или данных, но это даст вам представление о том, как это сделать. Обратите внимание, что внутренний select * работает так же быстро, как select aSingleField, поскольку движок базы данных оптимизирует его.

Это все мои мысли. Но помните, чтобы быть на 100% уверенным в том, что лучше всего подходит для вашей проблемы, нет ничего похожего на выполнение обоих тестов и выбор времени на них :) Надеюсь, эта помощь.

+0

Спасибо за помощь Мосты. Я должен определенно попробовать это. –

+0

Добро пожаловать @Ebbu! –

 Смежные вопросы

  • Нет связанных вопросов^_^