2016-01-02 2 views
-3

У меня есть массив, возможно, 1000 объектов с свойством ItemId. ItemId ссылается на первичный ключ таблицы.Поиск по массиву значений первичного ключа

Как получить максимальную производительность, выбрав 1000 строк по первичному ключу? Что такое лучшая практика?

  • Зацикливание 1000 раз в цикле C#, то есть 1000 no roundtrips в базу данных?
  • Один sql со встроенным списком, состоящим из 1000 предметов?
  • Используйте EF и присоединитесь к массиву объектов со столом.

Любые лучшие идеи?

+0

Вероятно, вы должны проверить параметры, но я бы предположил, что параметр table value является лучшим. –

+0

Параметр, оцененный по таблице, кажется лучшим вариантом в моей реализации. Тогда я ограничу no roundtrips в базе данных. Спасибо! – Mike

ответ

0

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

Вы можете (и должны всегда) проверять производительность, опробовав все три подхода. Только когда вы сравните производительность своей конкретной системы, вы действительно узнаете. Чтобы узнать, почему производительность такая, как вы, вы можете использовать EXPLAIN перед запросом, чтобы узнать, что происходит.

В вашей конкретной ситуации вы можете найти (используя тесты производительности), что добавление временной таблицы, содержащей ваш массив, а затем объединение может иметь наилучшую производительность низкого уровня. Использование структуры сущностей должно быть сопоставимым, но это зависит от реализации.

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