我需要编写查询来检索ID的大列表。
我们确实支持许多后端(MySQL,Firebird,SQLServer,Oracle,PostgreSQL等),因此我需要编写标准的SQL。
id集的大小可能很大,查询将以编程方式生成。那么,最好的方法是什么?
1)使用IN编写查询
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
我的问题是。如果n很大会怎样?另外,性能如何?
2)使用OR编写查询
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
!减少为80毫秒。我的解决方案是1 +3。最后一个查询是一个长查询字符串,发送给SQL以执行。