Preciso escrever uma consulta para recuperar uma grande lista de IDs.
Nós suportamos muitos back-ends (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...), então eu preciso escrever um SQL padrão.
O tamanho do conjunto de IDs pode ser grande, a consulta será gerada programaticamente. Então, qual é a melhor abordagem?
1) Escrevendo uma consulta usando IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
Minha pergunta aqui é. O que acontece se n for muito grande? Além disso, e o desempenho?
2) Escrevendo uma consulta usando OR
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Eu acho que essa abordagem não tem n limite, mas e quanto ao desempenho se n for muito grande?
3) Escrevendo uma solução programática:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
Tivemos alguns problemas com essa abordagem quando o servidor de banco de dados é consultado pela rede. Normalmente, é melhor fazer uma consulta que recupere todos os resultados do que fazer muitas consultas pequenas. Talvez eu esteja errado.
Qual seria a solução correta para esse problema?
IN
! Fiz o meu como sua solução 1 + 3. Apenas a consulta final foi uma, longa cadeia de caracteres de consulta enviada ao SQL para execução.