作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要编写一个查询来检索大量 id 列表。
我们确实支持许多后端(MySQL、Firebird、SQLServer、Oracle、PostgreSQL ...),因此我需要编写标准 SQL。
id 集的大小可能很大,查询将以编程方式生成。那么,最好的方法是什么?
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
我的问题是。如果 n 很大会发生什么?另外,性能怎么样?
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
我认为这种方法没有n限制,但是如果n很大的话性能如何?
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/
我是一名优秀的程序员,十分优秀!