各位前辈,小弟菜鸟,写了一个小程序用来统计服务器上的关于4中消费数据,主要是统计各个类的消费每个月每天6:00-23:59各个时段的消费次数,然后写入到本地Access数据库,主要代码如下:
C# code
case "01":
case "03":
case "05":
case "07":
case "08":
case "10":
case "12":
for (int d = 1; d <= 31; d++)
{
date = txtyear.Text + "-" + cobMonth.Text + "-" + d.ToString();
for (int t = 6; t <= 23; t++)
{
string QueryCT1 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '1'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
string QueryCT2 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '2'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
string QueryCT3 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '3'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
string QueryCT4 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '4'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
//string QueryCBS = "SELECT Sum(balance) FROM EM_RecBuf WHERE ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
SqlCommand sqlcmd1 = new SqlCommand(QueryCT1, conn);
cct1 = int.Parse(sqlcmd1.ExecuteScalar().ToString());
SqlCommand sqlcmd2 = new SqlCommand(QueryCT2, conn);
cct2 = int.Parse(sqlcmd2.ExecuteScalar().ToString());
SqlCommand sqlcmd3 = new SqlCommand(QueryCT3, conn);
cct3 = int.Parse(sqlcmd3.ExecuteScalar().ToString());
SqlCommand sqlcmd4 = new SqlCommand(QueryCT4, conn);
cct4 = int.Parse(sqlcmd4.ExecuteScalar().ToString());
ccs = cct1 + cct2 + cct3 + cct4;
//SqlCommand sqlcmdCBS = new SqlCommand(QueryCBS, conn);
//cbs = sqlcmdCBS.ExecuteScalar().ToString();
string time = t.ToString();
//写入本地数据库
SaveTolocal(date,time,cct1,cct2,cct3,cct4,ccs);
}
};
break;
问题:
1、用循环统计一个月500多条记录,居然要花10多分钟,sql server的CPU占用率达90%,怎样优化统计4种“类别”(1.2.3.4)同一时段的查询,我用了4调
( string QueryCT1 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '1'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
string QueryCT2 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '2'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
string QueryCT3 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '3'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
string QueryCT4 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '4'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";)
2、//string QueryCBS = "SELECT Sum(balance) FROM EM_RecBuf WHERE ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";这一句什么地方有错,运行时总会出错,被我注释掉了!
小弟这里先拜谢了!
这个问题第1个回答:
可以合并成一句
string QueryCT4 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype IN ('1','2','3', '4') AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
这个问题第2个回答:
select Sum(balance)from EM_RecBuf where ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";)
//改成这个就对了~~~~
这个问题第3个回答:
谢谢,不过怎样将统计的结果分别返回给4个变量呢?
这个问题第4个回答: