【发布时间】:2010-06-11 14:44:54
【问题描述】:
我目前有一个 SQL 查询,目前像这样多次调用(伪代码):
foreach(KeyValuePair kvp in someMapList)
{
select col1 from table where col2 = kvp.key and col3 = kvp.value;
//do some processing on the returned value
}
如果它是一个大的对列表,上面显然可以多次调用数据库。
谁能想到一条更高效的 SQL 语句,它基本上可以根据两个唯一信息的列表返回特定值的列表,以便可以批量完成处理?一个明显的方法是使用 OR 构建一大段 SQL,但这可能效率很低?
谢谢
卡尔
【问题讨论】:
-
对 sql-server 进行大量调用然后使用大量 or 构建查询可能效率更低。只需确保索引正确即可。
-
一口气完成,即使这意味着很多
or。尽量不要循环查询。 -
我只是注意到这个问题上的 nhibernate 标签。如果您显示的伪代码实际上使用 HQL 或 ICriteria,您可以简单地让 NHibernate 为您将其汇总为一个批次:nhforge.org/blogs/nhibernate/archive/2008/08/31/…
-
@Jay,谢谢。我实际上是使用 nHibernate 来实现的,所以这可能是一个很好的选择。我会看看这个。谢谢!
-
考虑键值对是否是一件好事。最好在相关表中正确定义您的字段。键值设计是许多应用程序的失败之路。在你走得太远之前,请阅读simple-talk.com/opinion/opinion-pieces/bad-carma。
标签: c# sql nhibernate