我需要做的是: 我得到一个数组,让我们说100000个值,对于我需要进行相同查询的每个值,只需更改该特定值。 现在,我想如果我在我的c#/ java代码中循环所有这些值并达到查询,则需要花费很多时间。 我的另一个选择是在我的数据库中完成所有工作,填充临时表,然后从该临时表中读回我的代码。
做这种事的最快方法是什么?
private void GetValues(List<Element> _Elements)
{
foreach (Element e in _Elements)
{
using (OracleCommand cmd = new OracleCommand())
{
cmd.Connection = _conn;
cmd.CommandText = "select value from table where something = " +e.Indicator;
using(OracleDataReader r = cmd.ExecuteReader());
while (r.Read())
{
e.setvalue = r.GetString(1);
}
r.Close();
}
}
}
}
[编者注:问题最初还不清楚是C语言还是Java语言 - 但语言基本相同,答案应适用于两者。]
答案 0 :(得分:2)
执行一个查询,
select value from table where something between min and max;
或
select value from table where something in (a, b, c, ... );
或
select value from table where something in
(select things from tempTable);
或
select value from table where something in
(select things from @tablevariable);
这些方法中哪一种最适用于您的数据库和问题。
一遍又一遍地重复所有处理,而不是合并结果必须比首先采用基于集合的方法慢。
这完全取决于Indicator
Element
的{{1}}属性的类型和分布。
答案 1 :(得分:1)
更快捷的方法是使用动态查询。在循环中,您可以构建一个语句,以便一次使用多个值。
在您提供的示例中,它意味着构建类似的语句。
select value from table where something in (n1, n2,... ,n500)
select value from table where something in (n501, n502,... ,n1000)
根据您所面临的(字符?)限制,您可能不必进行多次查询。
答案 2 :(得分:0)
有很多优化提示,但针对您的具体情况,这里有2: