重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 4900|回复: 0
打印 上一主题 下一主题

[数据库] 执行大量SQL子句问题的简化

[复制链接]

287

主题

668

帖子

5653

积分

学生管理组

Rank: 8Rank: 8

积分
5653
跳转到指定楼层
楼主
发表于 2016-4-13 02:47:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天做一个财务报表,要用到很多查询数据库,结果我写了个程序,算下来用了800条SQL来查,每条都是分开的,开了了连接 查了又关。。。。这样速度很慢,费时半分钟,用户明显体验不好。


代码如下:

[C#] syntaxhighlighter_viewsource syntaxhighlighter_copycode
      
  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[i], read[properties[i]]);
                }
                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条查询句子,但是一条查询返回的值有很多个,我全部装到泛型里面,然后再到程序里面做判断,由于在程序里面运算的时间忽略不计,所以速度很快了,秒算出来。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-5-11 14:30 , Processed in 0.176040 second(s), 28 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表