李维强-15级 发表于 2016-4-13 02:47:44

执行大量SQL子句问题的简化

今天做一个财务报表,要用到很多查询数据库,结果我写了个程序,算下来用了800条SQL来查,每条都是分开的,开了了连接 查了又关。。。。这样速度很慢,费时半分钟,用户明显体验不好。


代码如下:

      
public List<Dictionary<string, object>> GetList(String sql, String[] properties)
      {
            int prosLength = properties.Length;
            SqlCommand command = new SqlCommand(sql);
            SqlConnection sqlConn = getConnection();
            command.Connection = sqlConn;
            if (sqlConn.State != ConnectionState.Open)
            {
                sqlConn.Open();
            }
            SqlDataReader read = command.ExecuteReader();
            List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
            Dictionary<string, object> map = null;
            while (read.Read())
            {
                map = new Dictionary<string, object>();
                for (int i = 0; i < prosLength; i++)
                {
                  map.Add(properties, read]);
                }
                list.Add(map);
                map = null;

            }
            read.Close();
            sqlConn.Close();
            return list;
      }
          string[] prototype_96 = new string[] { "clientID", "payBackNum" };
            string sql_96 = "SELECT ClientID, SUM (PaymentMoney) payBackNum FROM T_C_ClientPayment WHERE PaymentDate BETWEEN '" + start + "' AND '" + end + "' GROUP BY ClientID";
            List<Dictionary<string, object>> list5 = basedao.GetList(sql_96, prototype_96);
               
            for (int i = 0; i < list.Count; i++)                //这里的count有200多
            {
                sql1="XXXXXXX"       
                GetList(sql1,prototpye1);
                sql2="XXXXXXX"       
                GetList(sql2,prototpye1);
                sql3="XXXXXXX"       
                GetList(sql3,prototpye1);
                sql4="XXXXXXX"       
                GetList(sql4,prototpye1);
            }


上面那个for循环直接卡死。。。。。。我本来就要打算开个线程来算这个了。。。
原因就是 我在家里面 ,数据库在阿里云上,执行一条查询,连接时间和断开时间就是接近80毫秒,多了当然要卡死,我把代码放到服务器上面要好一些,因为毕竟是访问本地嘛,数据库也同时安装在服务器上的,但是还是慢。。。
最后我有优化了查询,只用了5条查询句子,但是一条查询返回的值有很多个,我全部装到泛型里面,然后再到程序里面做判断,由于在程序里面运算的时间忽略不计,所以速度很快了,秒算出来。


页: [1]
查看完整版本: 执行大量SQL子句问题的简化