Мне нужно написать запрос, чтобы получить большой список идентификаторов.
Мы поддерживаем множество бэкэндов (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);
}
У нас возникли некоторые проблемы с этим подходом, когда сервер баз данных запрашивается по сети. Обычно лучше сделать один запрос, который извлекает все результаты, а не много маленьких запросов. Может я не прав.
Каково было бы правильное решение этой проблемы?
IN
! Я выбрал в качестве вашего решения 1 + 3. Просто последний запрос был одной длинной строкой запроса, отправленной в SQL для выполнения.