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

我需要写一个查询来检索一个大的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 (id in myIdList)
  {
      item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
      myObjectList.Add(item);
  }

当通过网络查询数据库服务器时,我们遇到了此方法的一些问题。通常最好做一个查询检索所有结果,更好的很多小查询。也许我错了。

什么是这个问题的正确解决方案?

选项1是唯一好的解决方案。

为什么?

>选项2也是这样,但你重复列名称很多次;此外,SQL引擎不会立即知道您想要检查值是否是固定列表中的值之一。然而,一个好的SQL引擎可以优化它具有与IN相同的性能。仍然有可读性问题,虽然…
>选项3是简单可怕的性能。它每个循环发送一个查询,并用小查询来敲击数据库。它还阻止它对“值是给定列表中的值之一”使用任何优化,

http://stackoverflow.com/questions/5803472/sql-where-id-in-id1-id2-idn

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:SQL WHERE ID IN(id1,id2,…,idn)