Используйте соединение.

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

Мы поддерживаем множество бэкэндов (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...), поэтому мне нужно написать стандартный SQL.

Размер набора идентификаторов может быть большим, запрос будет сгенерирован программно. Итак, каков наилучший подход?

1) Написание запроса с использованием IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)

Мой вопрос здесь Что будет, если n очень большое? Кроме того, как насчет производительности?

2) Написание запроса с использованием ИЛИ
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn

Я думаю, что у этого подхода нет предела n, но как насчет производительности, если n очень велико?

3) Написание программного решения:
  foreach (id in myIdList)
  {
      item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
      myObjectList.Add(item);
  }

У нас возникли некоторые проблемы с этим подходом, когда сервер баз данных запрашивается по сети. Обычно лучше сделать один запрос, который извлекает все результаты, лучше, чем множество небольших запросов. Может я не прав.

Каково было бы правильное решение этой проблемы?

Ответы на вопрос(8)

Ваш ответ на вопрос