查询多个查询的最快方法

时间:2013-07-10 09:53:01

标签: c# sql

我需要做的是: 我得到一个数组,让我们说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语言 - 但语言基本相同,答案应适用于两者。]

3 个答案:

答案 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)

更快捷的方法是使用动态查询。在循环中,您可以构建一个语句,以便一次使用多个值。

在您提供的示例中,它意味着构建类似的语句。

  • query1:select value from table where something in (n1, n2,... ,n500)
  • query2:select value from table where something in (n501, n502,... ,n1000)

根据您所面临的(字符?)限制,您可能不必进行多次查询。

答案 2 :(得分:0)

有很多优化提示,但针对您的具体情况,这里有2:

  1. 尝试一气呵成,@ Jodrell为此提出了非常好的想法。
  2. 从数据库中检索尽可能小的数据,只选择您需要的字段。