gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:21:01 26 4
gpt4 key购买 nike

我需要编写一个查询来检索大量 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);
}

当通过网络查询数据库服务器时,我们遇到了这种方法的一些问题。通常,执行一次检索所有结果的查询比执行大量小查询更好。也许我错了。

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

最佳答案

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

为什么?

  • 选项 2 的作用相同,但您多次重复列名称;此外,SQL 引擎不会立即知道您要检查该值是否是固定列表中的值之一。然而,一个好的 SQL 引擎可以对其进行优化,使其具有与 IN 相同的性能。但仍然存在可读性问题......

  • 选项 3 的性能简直太糟糕了。它在每个循环中发送一个查询,并用小查询来敲击数据库。它还阻止它对“值是给定列表中的值之一”使用任何优化

关于SQL WHERE ID IN (id1, id2, ..., idn),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5803472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com