SQL WHERE ID IN (id1, id2,…, idn)

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

Мы поддерживаем множество бэкэндов (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 (var id in myIdList)
  {
      var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
      myObjectList.Add(item);
  }

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

Что было бы правильным решением для этой проблемы?

142
задан OrionMD 11 September 2019 в 12:37
поделиться