2009-08-03 3 views
3

, если им с помощью 2 запросов:SQL: SELECT IN быстрее и лучше всего?

первый: запрашивает все ключи/Идентификаторы требуется

второй: выберите * от tab1 где tab1.id в (... список IdS .. ,,)

список идентификаторов может составлять несколько тысяч ...

Это мудрость или лучшая практика или рекомендуется делать подобные вещи?

ответ

7

Как правило, наилучшим вариантом является использование предложения IN в ваших утверждениях ... при условии, что вы используете подзапрос для более крупных наборов значений.

Ответ всегда должен быть: от! Из вашего вопроса неясно, будет ли ваш список значений SELECT, или вы бы их жестко кодировали. Это определенно было бы более результативным, если бы эти несколько тысяч значений находились в другой таблице (временная таблица или переменная таблицы), и вы их подписали. т.е.

SELECT * FROM Customer 
    WHERE CustomerID IN (SELECT ID FROM MyOtherLargeTableOfCustomers) 
  • как хорошо индексируются в том, что столбец, который вы выполняете, что IN пункт о?
  • Какой тип данных? Если числовой тип данных, то у вас не должно быть проблем с производительностью.
  • убедитесь, что ваш STATISTICS (если SQL Server) регулярно обновляется.
  • Если тип данных основан на символах или ориентир, вы можете столкнуться с некоторыми проблемами с производительностью, особенно при одновременном запуске нескольких запросов, а список - в тысячах, как вы описываете.
  • считать JOIN вместо этих таблиц; что всегда должно производить более быстрый запрос.
SELECT * FROM Customer AS C 
INNER JOIN MyOtherLargeTableOfCustomers AS M 
ON C.CustomerID = M.CustomerID 
1

если ваши идентификаторы запрашиваемых в подключаемом таблице, используя внутреннее соединение должно дать вам быстрый запрос и дать вам существенно меньший запрос для отправки в БД.

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