微调一些多次调用的SQL

时间:2010-06-11 14:44:55

标签: c# sql nhibernate

我目前有一个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,但这可能效率很低?

由于

卡尔

2 个答案:

答案 0 :(得分:0)

将KeyValuePair插入表中并使用JOIN man 或(如果是c#)

from record in table
join key in someMap on record.col2 equals key.key && record.col3 equals key.keyvalue
select col1 //or some anonymous type or a DTO I do not know...

那就更有效了:D

答案 1 :(得分:0)

假设您坚持使用实体 - 值对模式​​,最好的办法是创建一个存储过程并传入一对分隔的字符串,然后您可以将其转换为临时表并选择使用加入,或者如果你可以传入一个更好的表参数。

另一种可能性是插入工作表中,为您的值添加某种唯一的连接ID,然后加入其中。

在任何情况下,您的目标都是能够通过以某种方式将配对进入数据库,使用基于集合的方法选择数据。