Мені потрібно написати запит, щоб отримати великий список ідентифікаторів.
Ми підтримуємо безліч програм (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 для виконання.